Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronicowanie miliona rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
deejay4net
Witam, mam taki problem, szukam skutecznego rozwiązania na stronicowanie miliona rekordów, poza samym strocniowaniem czasami występują warunki lub sortowanie względem pola. Klasa przeze mnie napisana do tej pory opierała się na liczeniu przed zapytaniem ilości wszystkich rekordów poprzez COUNT(1) FROM Dalczy ciąg zapytania...
Lecz przy milionie rekordów wydaje mi się to w ogóle nie optymalne bo samo wejście z pozycji skryptu w listowanie rekordów po 20 np. trwa długo mimo iż tylko ja to przeglądam i z bazy nie korzysta nikt inny. Jak Wy rozwiązujecie stronicowanie takiej ilości rekordów? Mam nadzieje że dobry dział, dawno tutaj nie zaglądałem.
nospor
Normalne stronicowanie jest niezależne od liczby rekordów. Czy ich jest 100 czy milion to dla stronicowania nie ma różnicy - przecież wyświetlasz na raz powiedzmy 20 rekordów. Skoro ci muli to masz nieoptymalne zapytania, złe indeksy.
deejay4net
Przyjrze się dokładnie temu chociaż raczej indeksy i zapytania są poprawne
nospor
1) Pokaż swój kod
2) Zrób EXPLAIN na zapytaniach i pokaż co zwraca
bpskiba
Dodam...


Przy stronicowaniu najczęściej serwer wykonuje sortowanie, więc istotna jest konfiguracja serwera i rozmiary buforów biorących w tym udział. Milion rekordów, to nie jest szczególnie dużo, ale domyślna konfiguracja może nie wystarczyć.
Jak wygląda sortowanie w zapytaniu?questionmark.gif
alegorn
explain!

sortowanie wzgledem jakiejs kolumny? najprawdopodobniej : wymuszasz uzycie tabel tymczasowych, ktore przekraczaja rozmiar bufora, i idzie zapis na dysk.

jaki silnik? myisam? innodb? kazda z nich zachowuje sie inaczej.... wiec nie dam ci bardziej precyzyjne odpowiedzi...


j.
deejay4net
Sorry, że tak późno. Sinik myisam, ustawienia domyślne, Ogólnie nie dotyczy to problemu konkretnego skryptu, czy zapytania. Jest to problem ogólny. Jak to optymalnie zrobić i ustawić aby milion czy np 10 milionów rekordów nie stanowiły problemu. Możliwe że robie złe indeksy bo to chyba rozdział który trochę przegapiłem jeśli chodzi MySQL, a nigdzie nie mogę znaleźć dobrego objaśienia gdzie, kiedy i jak najlepiej je stosować...
bpskiba
Cytat(deejay4net @ 5.06.2012, 23:22:31 ) *
Sorry, że tak późno. Sinik myisam, ustawienia domyślne, Ogólnie nie dotyczy to problemu konkretnego skryptu, czy zapytania. Jest to problem ogólny. Jak to optymalnie zrobić i ustawić aby milion czy np 10 milionów rekordów nie stanowiły problemu. Możliwe że robie złe indeksy bo to chyba rozdział który trochę przegapiłem jeśli chodzi MySQL, a nigdzie nie mogę znaleźć dobrego objaśienia gdzie, kiedy i jak najlepiej je stosować...


Indeksowanie jest kluczowym elementem jeśli chodzi o wydajność zapytań. Nie ma na to jednego wzoru czy szablonu i do każdego serwisu należy podchodzić indywidualnie. Nie masz szans na pomoc poprzez forum. Polecam książki np taką
http://helion.pl/ksiazki/wysoko-wydajne-my...ling,wydmsq.htm

Przypadek, gdy kilkaset tysięcy rekordów stronicuje się szybko, a po przekroczeniu jakiegoś progu następuje lawinowy spadek wydajności sugeruje jednak problem z konfiguracją serwera:
Myślę, że najszybciej uzyskasz wskazówki i poprawę wydajności odpalając jakiś skrypt do optymalizacji

https://github.com/rackerhacker/MySQLTuner-...r/mysqltuner.pl

http://genomewiki.ucsc.edu/index.php/Tuning-primer.sh
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.