Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja zapytania - złączenia
torbicki65
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 8.11.2008

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


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





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Sprawdź co pokaże EXPLAIN, będziesz wiedział co jeszcze można poprawić
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: 23.08.2025 - 10:34