dedlfix: langsame MySQL Abfrage

Beitrag lesen

Tach!

Also die JOINs brauche ich, denn das Skript muss im JOIN erstmal die Artikelnummer (Gruppe) finden, denn im Auftrag stehen nur die Einzel-Artikel (Hose Rot - XL) und ich möchte ja auf Artikelgruppe (im Beispiel Hose Rot) herausfinden, welche Artikel andere Kunden noch gekauft hatten. (Beispiel Hose Grün)

Weöchen Vorteile habe ich denn mit Subquerys. Sind diese so viel schneller?

Zur Geschwindigkeit habe ich noch keine Versuche angestellt. Vielleicht bringt das was, weil nicht erst eine große Datenmenge erstellt werden muss, in der dann gesucht wird, sondern weil die entsprechenden Bedingungen in kleinen Datenmengen direkt in den Tabellen und deren Indizes überprüft werden können. Vielleicht liege ich mit der Vermutung aber auch komplett daneben.

Die Subquerys sind jedoch aus meiner Sicht expressiver. Sie sagen deutlicher und geradeheraus was man will und verstecken das nicht in einem Join.

Ich nehme nur mal den ersten Teil der Query und formuliere den um

SELECT COUNT(artikel_attribut.anr) as count, artikel_attribut.anr 
FROM artikel_attribut
JOIN artikel ON artikel.anr=artikel_attribut.anr AND artikel.anr!='1'
SELECT COUNT(anr) as count, anr 
FROM artikel_attribut
WHERE EXISTS (SELECT * FROM artikel WHERE anr = artikel_attribut.anr AND anr != '1')

Zudem bekommst du durch die große Query durch die Subquerys in kleinere Teile zerlegt, die sich auch einzeln testen lassen. So kannst du schauen, ob sie die Teile an sich ein richtiges Ergebnis liefern. Einen Mehrfachjoin kannst du nur debuggen, indem du Joins entfernst und wieder hinzufügst und schaust, welchen Einfluss das auf die restliche Query hat.

Vielleicht wird durch die Subquerys das ganze Konstrukt durchschaubarer und du findest Teile, die du weglassen oder vereinfachen kannst. In deiner Query verwendest du beipielsweise die Tabelle auftrag_artikel zweimal.

dedlfix.