Daniel Petratsch: Mysql Join Performance Frage

Beitrag lesen

Hallo!

Ich habe eine Frage zwecks der Performance von Mysql Join Abfragen:

Angenommen ich habe eine Tabelle mit Artikel und eine Tabelle mit zugehörigen Lieferanten, die am Lieferantenordersatz gejoined werden, so würde die Otto-NormalMysqlBenutzerabfrage in etwa so aussehen:

------->
SELECT   a.ordersatz,a.ueberschrift,a.beschreibung,a.verkaufspreis,a.gewicht,a.laenge,a.breite,a.hoehe,a.lieferzeit,
b.firmenname,b.plz,b.ort,b.lieferzeit
FROM artikel AS a
INNER JOIN lieferantendaten as b
ON (a.ordersatz = b.ordersatz)
WHERE a.artikel_nr = "10025";
------->

Aber nun ist es ja so, dass zuerst die ganzen Daten in einer Temporären Tabelle gejoined werden, und dann erst durch die WHERE Klausel die entsprechenden Tupel selektiert werden. Das heisst also konkret, wenn ich angenommen 50.000 Artikel habe, so werden zuerst alle 50.000 Datensätze mit dem entsprechenden Lieferanten gejoined und danach wird genau 1 Artikel aus den 50.000 herausselektiert. Also sind das dann ja 49.999 umsonst gejointe Datensätze...

Mein meiner Meinung nach besserer Ansatz wäre dieser:

------->
SELECT  a.ordersatz,a.ueberschrift,a.beschreibung,a.verkaufspreis,a.gewicht,a.laenge,a.breite,a.hoehe,a.lieferzeit,
b.firmenname,b.plz,b.ort,b.lieferzeit
FROM artikel AS a
INNER JOIN lieferantendaten as b
ON (a.ordersatz = b.ordersatz AND a.artikel_nr = "10025")
WHERE a.artikel_nr = "10025";
------->

So wird ja eigentlich von Anfang an nur der benötigte Datensatz gejoined, temporär abgelegt und danach wird dieser mittels der WHERE Klausel herausselektiert. Ich habe einmal im Mysql Online Manual irgendwo gelesen, dass man solche Bedingung aber nicht in der Join Klausel setzen sollte, also meine Frage, ist dieses Statement gerechtfertigt, oder kann es da irgendwie zu Komplikationen kommen, weil es ja explizit nicht gemacht werden sollte? Es wäre halt von der Performance her schon um einiges besser denke ich mal.

freundliche Grüsse,
Daniel

--
Das ist der ganze Jammer, die Dummen sind immer so sicher und die Gescheiten so voller Zweifel.
[Bertrand Russell]