<HTML>Hallo!
Ich habe ein Problem mit folgendem SQL Konstrukt:
SELECT Sammelgebiete.sID AS 'sID', Sammelgebiete.Name, count(*) AS 'anzahl', MAX(Kleinanzeigen.Datum) AS 'letzte_Anzeige' FROM Kleinanzeigen RIGHT OUTER JOIN Sammelgebiete USING(sID) GROUP BY sID ORDER BY Sammelgebiete.sortName ASC
Die Tabellen dazu sehen folgendermaĂźen aus:
Sammelgebiete:
==============
Felder:
- sID
- Name
- sortName
#Daten: ~ 550
Kleinanzeigen:
==============
Felder:
- ID
- sID
- Datum
#Daten: ~ 5000
In der Tabelle Sammelgebiete stehen natĂĽrlich solche mit Namen und ID. In der Tabelle Kleinanzeigen stehen die Kleinanzeigen fĂĽr die Sammelgebiete. Es ist aber auch Sammelgebiete ohne Anzeigen.
Ich hätte gerne eine Auflistung aller Sammelgebiete mit Anzahl der Anzeigen darin und dem Datum der zuletzt aufgegebenen Anzeige.
Leider ist die Laufzeit bis das Ergebnis fertig ist enorm hoch. Zu hoch fĂĽr eine Webapplikation. Es scheint, als ob doch irgendwo das kartesische Produkt gebildet wird. Ich weiss nur nicht wo...
Hat jemand eine Idee wie ich die 55 Sek. Laufzeit drĂĽcke. Die MAX und count(*) Funktionen haben damit wenig zu tun. Damit schaffe ich gerade ne halbe Sekunde weniger.
Ich hab noch die umständliche Brutforce Methode im Hinterkopf die kommt aber erst zum Schluss.
Ein LEFT [OUTER] JOIN braucht nur eine halbe Sekunde liefert aber nur die Sammelgebiete, in denen es auch Anzeigen gibt.
Danke schon mal im Vorraus.
GrĂĽĂźe
Florian
</HTML>