Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Führt die MySQL IN-Klausel die Unterabfrage mehrmals aus?

Ihre Annahme ist falsch; Die Unterabfrage wird nur einmal ausgeführt. Der Grund, warum es langsamer als ein Join ist, liegt darin, dass IN kann Indexe nicht nutzen; es muss seine Argumente einmal für jedes Mal scannen, wenn WHERE -Klausel wird ausgewertet, d. h. einmal pro Zeile in TabelleA. Sie können die Abfrage optimieren, ohne Variablen oder gespeicherte Prozeduren zu verwenden, indem Sie einfach IN ersetzen mit einem Join, also:

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

Sofern es Ihnen nichts ausmacht, jedes Feld aus beiden Tabellen zurückzubekommen, müssen Sie die gewünschten Felder im SELECT aufzählen Klausel; tableA.* , wird beispielsweise einen Syntaxfehler hervorrufen.