Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania - złączenia
Forum PHP.pl > Forum > Bazy danych > MySQL
torbicki65
Witam
Kolega posiada serwis (hosting zdjęć) robiony na zamówienie, jednak poprawiam pewne niedoróbki, mianowicie dziś stanęło na zapytaniu, które na serwerze nazwa.pl wykonuje się .. 15 sekund. Za pomocą tego zapytania udało mi się skrócić czas wykonania zapytania do ~0,9 sekundy.

  1. SELECT u.id, u.username, u.registered, u.use_avatar, COUNT(z.id) AS ilosc_zdjec, ROUND(AVG(o.ocena),1) AS srednia
  2. FROM forum_users u
  3. JOIN tbl_zdjecia z ON u.id = z.user_id
  4. JOIN tbl_oceny o ON u.id = o.target_owner
  5. WHERE u.id > 1
  6. GROUP BY u.id


i teraz tak:
Są 3 tabele: forum_users - gdzie jest większość danych o użytkowniku, tbl_zdjecia - czyli informacje o zdjęciach oraz tbl_oceny - czyli oceny wystawiane zdjęciom.

Zasadniczo zapytanie to pobierać ma id, nazwę użytkownika, datę rejestracji (u.registered), avatar (u.use_avatar), dodatkowo ma zliczać ilość zdjęć danego użytkownika (z.id) oraz wyliczać średnią ocen - do tego użyłem round w celu zaokrąglenia i avg.
Target_owner to oczywiście id użytkownika w tabeli tbl_oceny.
To moje pierwsze doświadczenia ze złączeniami (w końcu je zaczynam rozumieć), jednak zapytanie przy tych 3 tabelach ciągle wykonuje się lekko poniżej 1 sekundy - czy jest jakaś szansa na większą optymalizację? Ktoś z was ma jakieś sugestie?
Wcześniej obliczanie średniej było wykonane zagnieżdżonym SELECTem.
zzeus
Sprawdź co pokaże EXPLAIN, będziesz wiedział co jeszcze można poprawić
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.