verbindet Refactoring ich einen langsamen Abschnitt einer Anwendung, die wir von einem anderen Unternehmen übernahm eine innere Verknüpfung statt einer Unterabfrage wieSubqueries vs
where id in (select id from ...)
Die umstrukturierte Abfrage läuft über 100x schneller zu bedienen. (~ 50 Sekunden bis ~ 0,3) Ich erwartete eine Verbesserung, aber kann mir jemand erklären, warum es so drastisch war? Die in der where-Klausel verwendeten Spalten wurden alle indiziert. Führt SQL die Abfrage in der where-Klausel einmal pro Zeile oder so aus?
aktualisieren - Erklären Ergebnisse:
Der Unterschied ist im zweiten Teil der "where id in()" Abfrage -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 indexierte Zeile mit dem Join:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index
Mögliches Duplikat von [Join vs. Sub-Query] (http://stackoverflow.com/questions/2577174/join-vs-sub-query) –
Kein Duplikat. In dieser Frage geht es insbesondere um auffällige Leistungsunterschiede. Die andere Frage ist allgemeiner, offen über die Vor- und Nachteile jedes Ansatzes und warum ein Ansatz populärer erscheint. –