Vinzenz Mai: Performanter SQL

Beitrag lesen

Hallo,

Szenario: Ich möchte eine Liste aller Benutzer erstellen und zu jedem Benutzer wissen, wieviele Artikel er geschrieben hat und wieviele Freunde er hat ...

SELECT *,
-- benötigst Du wirklich alle Spalten aus der Tabelle benutzer?

(SELECT count() FROM FRIENDS f WHERE b.uid = f.uid) AS FRIENDS,
(SELECT count(
) FROM ARTIKEL a WHERE b.uid = a.uid) AS ARTIKEL,
FROM BENUTZER b

  

> ODER ich hole alle Benutzer raus, loope darüber und führe für jeden Benutzer die beiden Subselects aus.  
  
das ist höchstwahrscheinlich deutlich langsamer.  
  

> Welche der beiden Arten ist denn am schnellsten bzw. empfehlenswertesten  
  
EXPLAIN befragen, messen, optimieren, erneut EXPLAIN befragen, erneut messen ...  
  

> oder gibt es noch eine andere Möglichkeit den SQL aufzubauen - ich hab da an JOINs gedacht, aber dafür hab ich einfach kein Händchen.  
  
Freundliche Grüße  
  
Vinzenz