Ich habe einen langsamen Abschnitt einer Anwendung, die wir von einem anderen Unternehmen geerbt haben, überarbeitet, um einen inneren Join anstelle einer Unterabfrage wie der folgenden zu verwenden:
WHERE id IN (SELECT id FROM ...)
Die überarbeitete Abfrage wird etwa 100-mal schneller ausgeführt. (~ 50 Sekunden bis ~ 0,3) Ich habe eine Verbesserung erwartet, aber kann 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 aus oder so?
Update - Ergebnisse erklären:
Der Unterschied liegt im zweiten Teil der Abfrage "where id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 indizierte Zeile mit dem Join:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index