SQL IN vs. =: Leistungsunterschiede
Übersicht:
Der SQL-IN
-Operator prüft, ob ein Wert in einer angegebenen Liste vorhanden ist. Allerdings kann die Leistung bei Verwendung von IN
im Vergleich zum Operator =
erheblich beeinträchtigt werden, insbesondere in bestimmten Szenarien.
Das Problem:
Eine bestimmte SQL-Abfrage zeigte einen erheblichen Leistungsunterschied zwischen der Verwendung von IN
und =
, selbst wenn IN
nur einen einzelnen Wert verglich.
Grundursache:
Der Leistungsengpass ist auf einen MySQL-Optimierungsfehler zurückzuführen. MySQL kategorisiert eine Unterabfrage innerhalb einer IN
-Klausel fälschlicherweise als abhängige-Unterabfrage und nicht als unabhängige-Unterabfrage.
Abhängige vs. unabhängige Unterabfragen:
Diese Fehlklassifizierung ist kritisch. Abhängige Unterabfragen werden für jede Zeile in der äußeren Abfrage wiederholt ausgeführt, was sich drastisch auf die Leistung auswirkt. Unabhängige Unterabfragen hingegen werden nur einmal ausgeführt und ihre Ergebnisse werden aus Effizienzgründen zwischengespeichert.
Vereinfachte Analyse:
Eine vereinfachte Version der ursprünglichen Abfrage reproduzierte das Leistungsproblem und bestätigte, dass die Unterabfrage der IN
-Klausel als abhängig behandelt wurde, was zu einer langsameren Ausführung führte.
Auflösung:
MySQLs falsche Identifizierung des Unterabfragetyps als abhängig ist die Ursache für die Leistungseinbußen bei der Verwendung von IN
. Dieses Problem wurde in MySQL 5.6.x und späteren Versionen behoben.
Das obige ist der detaillierte Inhalt vonWarum ist meine SQL-IN-Bedingung beim Vergleich eines einzelnen Werts langsamer als „='?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!