![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 11.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z zapytaniem SQL. Stworzyłem do systemu newsow komentarze. Na stronie głównej przy każdym newsie licznik pokazuje ile jest komentarzy dla danego newsa. Komentarzy jest jak dużo, że przeliczenie tego obciąża serwer w takim stopniu, że destabilizuje jego prace. Poniżej wklejam zapytanie:
SELECT SQL_CALC_FOUND_ROWS newsy_id,newsy_data,newsy_czas,newsy_licznik,newsy_tytul,newsy_tekstskrocony,new sy_tekstrozszerzony,newsy_foto,fotosy_file,dzialy_nazwa,COUNT(komentarze_id) licznik FROM newsy LEFT JOIN fotosy ON (fotosy_id=newsy_foto) LEFT JOIN dzialy ON (dzialy_id=newsy_dzial) LEFT JOIN komentarze ON (komentarze_news = newsy_id AND komentarze_status = '1') WHERE newsy_status='1' GROUP BY newsy_id ORDER BY newsy_data DESC, newsy_czas DESC LIMIT 0, 25 Będę wdzięczny za uwagi. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 3 Dołączył: 9.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
mysle ze te 3 joiny w zapytaniu robia swoje, samo liczenie moglbys zorganizowac w osobnym zapytaniu wykonujac count po kolumnie na ktorej masz zalozony index (np po auto increment'owanym id) a jesli ciagle bedzie za wolno to cache'uj to zapytanie i powiedzmy raz na godzine usuwaj cache tak zeby trzymac w miare aktualne dane
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Baza danych nie jest kalkulatorem i jak będziesz miał dużo rekordów to zwykły COUNT będzie wolny. Rozwiązanie tego to denormalizacja licznika. Ilość komentarzy zapisujesz w tabeli newsa i inkrementujesz go przy dodaniu komentarza. Wyświetlając listę newsów nie musisz wtedy liczyć newsów na żywo.
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wydaje mi się, że zastosowanie w tym momencie podzapytania może okazać się wydajniejsze. Nie budujesz bowiem wielkiego złączenia tabel (w momencie, gdy do newsa jest wiele komentarzy) z grupowaniem:
Jeśli się nie machnąłem to powinno działać. Daj znać jak wyglądają czasy wykonań obu zapytań. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.09.2025 - 06:47 |