Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zadbać o wydajność..., Zliczanie countem z dwoch zewnetrznych tabel (1..*)
beherit
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 29.07.2009

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


Mam sobie takie zapytanie

  1. SELECT
  2. userData.userId, COUNT(user2site.siteId)
  3. FROM
  4. userData LEFT JOIN user2site USING(userId)
  5. WHERE
  6. userData.userOwnerId IN (1000,1002) OR
  7. userData.userOwnerId IS NULL
  8. GROUP BY
  9. userData.userId

i mniej więcej taka strukturę:
(IMG:http://brylant.ists.pwr.wroc.pl/~pablo/bd/class_diag0.jpg)
gdzie z lewej jest 1 a z prawej * (1..*)

Jak rozbudować to zapytanie, żeby w wyniku otrzymać prawidłowe
COUNT(siteWords.wordId) i jednocześnie dbając o wydajność.

Jakieś podpowiedzi?


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Tak może (ale nie musi - sprawdź) być trochę lepiej:

Kod
SELECT
  userData.userId, sq.cnt
FROM
  userData
LEFT JOIN (
  SELECT
    userId,
    COUNT(*) AS cnt
  FROM
    user2site
  GROUP BY
    userId
) AS sq
USNIG(userId)
WHERE ...


Poza tym sprawdź EXPLAINem obie wersje, czy korzystają z indeksów.
Go to the top of the page
+Quote Post

Posty w temacie


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: 3.10.2025 - 09:23