Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Paginacja - dużo rekordów
WashingtonPLx
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.05.2011

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


A ile czasu zajmuje Twojej bazie SELECT count(*)?
Go to the top of the page
+Quote Post
WashingtonPLx
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 24.05.2011

Ostrzeżenie: (0%)
-----


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ą
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
Puszy
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Lion
post
Post #7





Grupa: Zarejestrowani
Postów: 148
Pomógł: 14
Dołączył: 23.02.2013

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Shou
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 4
Dołączył: 6.11.2016

Ostrzeżenie: (0%)
-----


Jest jeszcze taki wynalazek jak SQL_CALC_FOUND_ROWS.
Go to the top of the page
+Quote Post
Puszy
post
Post #9





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 08:33