Gruppierte Anzeige beim Join von zwei Tabellen
Tim
TConnect at gmx.net
Mi Mai 6 14:09:02 CEST 2009
Hallo liebe Liste,
ich habe das Problem, dass eine Abfrage extrem lange dauert, die einen
Join zwischen zwei Tabellen beinhaltet und die gleichzeitig nach dem
Index der ersten Tabelle gruppiert. Also im Prinzip sowas hier:
SELECT t1.id, t1.feld1, t1.feld2, t2.feldA,
COUNT(t2.ref_id) as numRefs
FROM tabelle1 as t1
INNER JOIN tabelle2 as t2 ON t1.id = t2.ref_id
GROUP BY t1.id
Das Verhältnis zwischen der Menge der Datensätze zwischen Tabelle1 und
Tabelle2 liegt im konkreten Fall etwa bei 1:30. Pro Datensatz in
Tabelle1 gibt es also etwa 30 Referenz-Datensätze in Tabelle2. Lasse ich
das GROUB BY weg, ist die Abfrage sehr schnell, zeigt mir dann aber
logischerweise alle Tabelle1-Datensätze 30 mal an! Abgesehen davon kann
ich dann das COUNT() nicht mehr nutzen. In Tabelle1 sind derzeit rund
100.000 Datensätze. Alle Felder, die in der WHERE-Klausel vorkommen,
sind auch indiziert. Vor allem natürlich die jeweiligen ID's und die
ref_id.
Ich habe mir schon überlegt, ob ich MySQL einfach nur mehr Speicher zur
Verfügung stellen muss, aber wenn das so sein sollte, weiß ich nicht,
welchen Wert aus der my.conf ich entsprechend hochsetzen muss.
Es wäre schön, wenn mir da jemand einen Tipp geben könnte.
Liebe Grüße
Tim