MySQL Unterabfrage Korrelierte
mixmastertobsi
- datenbank
0 emetiel1 Vinzenz Mai
Hallo,
ich versuche mich gerade an einer korrelierte Unterabfrage, mit welcher ich mir bessere Performance versprochen habe. Leider braucht diese neue Abfrage länger....an was liegts.
Eigentlich müsste doch die neue Abfrage schneller sein.
In der alten Abfrage wurden pro Artikel noch ca 20 Zeilen aus der Tabelle artikel_attribut geladen. In der neuen nur noch eine...
ALT
SELECT * FROM artikel
JOIN artikel_attribut ON artikel_attribut.anr=artikel.anr
GROUP BY artikel.anr
NEU
SELECT * FROM artikel
JOIN artikel_attribut as a1 ON a1.anr=artikel.anr
WHERE artikel_attribut.preis=(SELECT min(artikel_attribut.preis) FROM artikel_attribut.anr=artikel.anr)
GROUP BY artikel.anr
Hi,
NEU
SELECT * FROM artikel
JOIN artikel_attribut as a1 ON a1.anr=artikel.anr
WHERE artikel_attribut.preis=(SELECT min(artikel_attribut.preis) FROM
artikel_attribut.anr=artikel.anr)
GROUP BY artikel.anr
Du bekommst zwar mit min nur einen Datensatz aus artikel_attribut zurück, dafür rufst Du den select aber bei jedem Datensatz aus artikel auf. Somit wird das langsamer.
gruß
emetiel
Hallo,
ich versuche mich gerade an einer korrelierte Unterabfrage, mit welcher ich mir bessere Performance versprochen habe. Leider braucht diese neue Abfrage länger....an was liegts.
an MySQL.
ALT
SELECT * FROM artikel
JOIN artikel_attribut ON artikel_attribut.anr=artikel.anr
GROUP BY artikel.anr
Jedes andere mir bekannte DBMS - außer MySQL - weist diese Abfrage als syntaktisch falsch zurück, bei
> In der alten Abfrage wurden pro Artikel noch ca 20 Zeilen aus der Tabelle artikel\_attribut geladen. In der neuen nur noch eine...
wie kommst Du auf diese Idee? Bei der alten Abfrage genügt [MySQLs GROUP-BY-Optimierung](http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-columns.html) irgendeine Zeile aus artikel\_attribut. Bei der neuen muss es eine ganz bestimmte sein. Kein Wunder, dass das länger dauert.
Dass es EXPLAIN gibt, [habe ich Dir schon geschrieben](/archiv/2011/4/t204422/#m1384506) ...
Freundliche Grüße
Vinzenz
Ja - und seitdem benutze ich auch ständig explain.
Hmm - aber wie kann ich nun aus der Tabelle artikel_attribut zum Beispiel den niedrigsten Preis ausgeben. Das geht doch nur mit einer Unterabfrage - oder?!?