![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 177 Pomógł: 0 Dołączył: 6.06.2004 Ostrzeżenie: (20%) ![]() ![]() |
Mam taki pytanko odnośnie bazki w Mysql. Na razie wszystko działa ok, ale mam jedna tabelkę(12 pól), która dość szybko się zapełnia nowymi rekordami. Przewiduję, że za kilka miesięcy może być kilkaset tysięcy rekordów, może milion. Czy taka liczba rekordów wpłynmie znacząco na szybkość przeszukiwaniaq bazki? Bo mam pomysł, żeby podzielić ją na kilka bliźniaczych, ale nie wiem czy jest sens. moze ktoś zna odpowiedź
-------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
z dobrze założonymi indeksami nie powinno być tak źle, ale oczywiście czym mniej rekordów w bazie tym lepiej (czyt. szybciej). jesli częśc danych ulega "przedawnieniu", tzn. np stare zamówienia czy coś w tym rodzaju, czy też po prostu dane z których coraz rzadziej korzystamy najlepiej wywalić do innej tabeli...
-------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 177 Pomógł: 0 Dołączył: 6.06.2004 Ostrzeżenie: (20%) ![]() ![]() |
właśnie problem w tym, że wszystkie rekordy w tej tabeli będą aktualne, będą podlegać conajwyżej modyfikacji. zastanawiam się czy możnaby stworzyć kilka tabel bliźniaczych, podzielić ej odpowiednio na kategorie, nie wiem tylko czy to eleganckie, no i trochę mniej funkcjonalne
-------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Aby być przygotowanym na ewentualne kłopoty,
najlepiej stwórz sobie kopie tej bazy i zapełnij ją do ok 2 milionów. Następnie wykonaj testy a dowiesz się czy masz dobre index'y ![]() -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Rastman @ 2005-02-02 00:51:40) właśnie problem w tym, że wszystkie rekordy w tej tabeli będą aktualne, będą podlegać conajwyżej modyfikacji. zastanawiam się czy możnaby stworzyć kilka tabel bliźniaczych, podzielić ej odpowiednio na kategorie, nie wiem tylko czy to eleganckie, no i trochę mniej funkcjonalne 1. założenie indeksów to podstawa. jesli dane są ułożone według konkretnej kolumny np.daty możesz co jakis czas wykonywać ALTER TABLE table ORDER BY kolumna DESC 2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika. -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Cytat ALTER TABLE table ORDER BY kolumna DESC Co to znaczy? Cytat 2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika. No nie wiem. Jeżeli będzie chciał wyszukiwać dane we wszystkich tabelach, to używanie UNION dla kilku tabel będzie małą katastrofą. -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-02 09:45:52) Cytat ALTER TABLE table ORDER BY kolumna DESC Co to znaczy? Cytat 2. stworzenie bliznaczych tabel dla różnych kategori, jesli tylko nie przeszkodzi to w formułowaniu zapytań, a wpłynie na wydajność jest jak najbardziej dobrym rozwiązaniem. w końcu właścicielowi systemu przeważnie nie chodzi o to czy rozwiązanie będzie eleganckie, ale czy skuteczne i wydajne z punktu widzenia użytkownika. No nie wiem. Jeżeli będzie chciał wyszukiwać dane we wszystkich tabelach, to używanie UNION dla kilku tabel będzie małą katastrofą. 1. porzadkuje rekordy w bazie wedlug kolumny kolumna 2. jak napisalem : "jesli to nie przeszkodzi w formułowaniu zapytań" -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Cytat 1. porzadkuje rekordy w bazie wedlug kolumny kolumna Wiem, chodziło mi jaki ma to związek z wydajnością. Cytat 2. jak napisalem : "jesli to nie przeszkodzi w formułowaniu zapytań" Tu nie chodzi o formułowanie zapytań. Chcąc cokolwiek wyszukać, musisz zrobić coś w rodzaju:
Jak wiesz podzapytanie from buduje tabelę tymczasową, więc moim zdaniem lepiej trzymać wszystko w jednej tabeli z dobrze założonymi index'ami. -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 177 Pomógł: 0 Dołączył: 6.06.2004 Ostrzeżenie: (20%) ![]() ![]() |
no i tu pojawia się problem, ponieważ wykonanie zapytania dla 700 000 rekordó trwa kilka minut lokalnie, w przypadku zwróconych kilku, kilkunastu rekordów kilkadziesiąt sekund, ale z bliźniaczymi tabrlami to też niedobry pomysł. Ale przeciez istnieją duże serwisy oparte o mysql'a, więc jakies optymalne rozwiązanie musi istnieć
pozdrawiam -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
To moze napisz cos wiecej o danych, ktore przechowujesz.
Podaj strukture tabeli i zapytanie(a), ktore tak muli(ą). -------------------- Brak czasu :/
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 177 Pomógł: 0 Dołączył: 6.06.2004 Ostrzeżenie: (20%) ![]() ![]() |
są to dane firm, ale mój problem chyba został rozwiązany przez zastosowanie indeksów. To chyba optymalne rozwiązanie. pozdrawiam
-------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-02 13:28:40) Cytat 1. porzadkuje rekordy w bazie wedlug kolumny kolumna Wiem, chodziło mi jaki ma to związek z wydajnością. cytując manuala This option is mainly useful when you know that you are mostly going to query the rows in a certain order; by using this option after big changes to the table, you might be able to get higher performance. innymi słowy, mysql szybciej wyszuka rekordy z tabeli jesli sa uporzadkowane tak jak w zapytaniu. -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Sorki za [OT]W Sieci można znaleść artykuły opisujące przypadki kiedy MysQL działał z 5 miliardami(
![]() ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#14
|
|
![]() Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
Z mojego doświadczenia wynika, że dobrze opracowane tabele zawierające bardzo duże ilości danych znacznie lepiej działają niż źle opracowane tabele z małą ilością rekordów...
Warto wykonać na tabeli polecenie:
by zobaczyć jak silnik MySQLa ułożył dane w takiej tabeli (w phpMyAdmin jest to funkcja "Propozycja struktury tabeli" dostępna pod listą pól tabeli). -------------------- Powrót do przeszłości :)
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 05:03 |