Count

Count

am 28.08.2006 16:47:39 von Oliver Benning

Hallo,

ich habe ein fertiges SQL Statement, das nun erweitert werden soll, ohne
die Anzahl der Ergebniszeilen zu beeinflussen. Lediglich eine count(..)
Spalte soll hinzugefügt werden. Hab auch schon eine Lösung, aber dafür
braucht MySQL extrem lange.

Nehmen wir an, so sieht das Ergebnis vorher aus:

tab1.x tab2.x tab3.x
1 10 1
1 10 2
1 20 5
1 20 9
1 30 21
2 50 27
2 60 34
3 70 48
3 80 56

Jetzt möchte ich eine vierte Count()-Spalte hinzufügen, die mir die
Anzahl der Datensätze mit der gleichen Nummer aus "tab1.x" liefert, bei
denen tab2.x z.B. kleiner als 50 ist.

Ich füge dem Statement also folgendes hinzu:

LEFT JOIN
tabelle1 AS tab4 ON(tab1.x = tab4.x)
LEFT JOIN
tabelle2 AS tab5 ON(tab4.y = tab5.y AND tab5.x < 50)

Dadurch vervielfacht sich jeder Datensatz und ich muß zu GROUP BY
greifen, um den ursprünglichen Zustand herzustellen.

Wenn ich in Verbindung mit dem GROUP BY dann einen Count nutze, ist das
Ergebnis viel zu groß.

Die Lösung:

count(distinct )

Und jetzt das Problem, bei "distinct" nutzt MySQL eine temporäre Tabelle
und das bewirkt bei mir, daß statt 0.xx Sekunden über 12 Sekunden für
meinen SELECT benötigt werden.

Wie optimiere ich das ganze?


Gruß,
Oliver