Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Paginacja - dużo rekordów
Forum PHP.pl > Forum > Bazy danych
WashingtonPLx
Zastanawiam się jak sobie poradzić z bardzo dużą ilością danych. Obecnie stosuję paginację (LIMIT), jednak aby wygenerować linki do następnych (1,2,3 itd...) stron zliczam wszystkie rekordy w bazie. Co z tego, że na stronie wyświetlę 10 rekordów jak i tak muszę za każdym odświeżeniem podstrony przeliczyć całą tabelę. Jak to jest rozwiązane np na demotywatory czy innych dużych serwisach ?
SmokAnalog
A ile czasu zajmuje Twojej bazie SELECT count(*)?
WashingtonPLx
może sprecyzuję, że nie mam obecnie problemu z jakąś wielką liczbą danych. Zastanawiam się jak to jest rozwiązane w innych dużych serwisach bo raczej standardowego COUNT nie stosują
SmokAnalog
Duże serwisy często stosują modyfikacje systemów baz danych. Ale stare dobre count(*) jest z tego co wiem bardzo dobrze optymalizowane, choć pewności nie mam gdzie i czy w ogóle to prawda. Możesz zrobić test - wstaw do bazy baaaaardzo dużo rekordów i zobacz smile.gif
nospor
Cytat
bo raczej standardowego COUNT nie stosują
A moge wiedziec czemu tak uwazasz? Czy moze poprostu strzelasz?

Tak, count() jest jak najbardziej ok w tym wypadku
Puszy
Cytat(nospor @ 7.11.2016, 09:33:00 ) *
A moge wiedziec czemu tak uwazasz? Czy moze poprostu strzelasz?

Tak, count() jest jak najbardziej ok w tym wypadku


Niekoniecznie, jeżeli mówimy o dużych tabelach lub wielu bazach count nie będzie zbyt opłacalny, dla przykładu: http://stackoverflow.com/a/6069288/2621852, polecam pogooglać count estimate i approximate count
Lion
Skoro wiadomo że rekordów jest tak dużo to można pominąć zliczanie ile ich w rzeczywistości jest tylko wygenerować paginację dla 1,2,3 strony, a po przejściu na 3 dla 4,5,6, itd. Jeśli użytkownikowi uda się doklikać do ostatniej strony to po prostu można mu wyświetlić komunikat że dalej już nic nie znajdzie wink.gif
Shou
Jest jeszcze taki wynalazek jak SQL_CALC_FOUND_ROWS.
Puszy
Cytat(Lion @ 7.11.2016, 22:29:28 ) *
Skoro wiadomo że rekordów jest tak dużo to można pominąć zliczanie ile ich w rzeczywistości jest tylko wygenerować paginację dla 1,2,3 strony, a po przejściu na 3 dla 4,5,6, itd. Jeśli użytkownikowi uda się doklikać do ostatniej strony to po prostu można mu wyświetlić komunikat że dalej już nic nie znajdzie wink.gif


Dokładnie, wszystko zależy czego się potrzebuje, można nawet zrobić to łopatologicznie i nastawić crona zrzucającego count do cache i wyświetlanie użytkownikowi przybliżoną ilość wyników tak jak to robią niektórzy klienci SQL.
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.