![]() |
![]() ![]() |
![]() |
![]()
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 ?
|
|
|
![]()
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(*)?
|
|
|
![]()
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ą
|
|
|
![]()
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
![]() |
|
|
![]()
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 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
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
![]() -------------------- |
|
|
![]()
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.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 279 Pomógł: 42 Dołączył: 10.10.2011 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 ![]() 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. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 27.06.2025 - 13:36 |