MySQL: Inner joins vs. sub queries

Heute wollte ich Kunden aus der Tabelle „Customers“ heraussuchen für die es in der Tabelle „Orders“ mindestens einen Auftrag gibt.

Mein erster Wurf dauerte 714 Sekunden:

SELECT * FROM customers WHERE ID in 
(SELECT customerID FROM orders group by customerID);

Der Verdacht liegt nahe, dass die Subquery hier nicht die richtige „Waffe“ ist:

select * from customers,
(SELECT customerID FROM orders group by customerID) as b 
where id = b.customerID;

Gleiches Ergebnis, aber schon nach 1,5 Sekunden. Eine gute Erklärung liefert folgender Thread:
http://stackoverflow.com/questions/141278/subqueries-vs-joins

Zusammenfassend kann man sagen, dass Subqueries zeilenweise immer wieder neu berechnet werden … leider auch, wenn keine Infos aus der Zeile benötigt werden.

Cheers,
Ralf

Comments are closed.