Heim >Datenbank >MySQL-Tutorial >Warum ist der „IN'-Operator von MySQL selbst bei einem einzelnen Wert langsamer als „='?
Ausnahme bei der MySQL-Abfrageleistung: Leistungsunterschied zwischen IN-Operator und Gleichheitszeichenoperator
Problembeschreibung
In MySQL ist die Leistung einer SELECT-Abfrage mit der IN-Bedingung deutlich geringer als die Leistung derselben Abfrage mit dem Gleichheitszeichenoperator (=). Selbst wenn die IN-Bedingung nur einen einzigen Wert enthält, kann der Leistungsunterschied erheblich sein.
Erklärung
Dieses Problem ist auf einen Optimierungsfehler in MySQL zurückzuführen, der in MySQL 5.6.x behoben wurde. Dieses Problem tritt auf, wenn eine Unterabfrage, die eine IN-Bedingung enthält, fälschlicherweise als abhängige Unterabfrage und nicht als unabhängige Unterabfrage klassifiziert wird.
Abhängige Unterabfrage und unabhängige Unterabfrage
Beispielabfrageanalyse
Die folgende Beispielabfrage veranschaulicht diese Anomalie:
<code class="language-sql">SELECT * FROM question_law_version WHERE id IN ( SELECT MAX(foo_id) FROM bar )</code>
Beim Ausführen dieser Abfrage wird die Unterabfrage als abhängige Unterabfrage behandelt, was zu einer schlechten Leistung führt. Das Ersetzen von IN durch = beseitigt jedoch die Abhängigkeit und verbessert die Leistung erheblich.
Abfrageplanvergleich
Eine Untersuchung des Abfrageplans mit dem EXPLAIN-Befehl zeigt den Unterschied:
Bitte beachten Sie, dass es im Abfrageplan, der den =-Operator verwendet, keine „ABHÄNGIGE UNTERABFRAGE“ gibt.
Das obige ist der detaillierte Inhalt vonWarum ist der „IN'-Operator von MySQL selbst bei einem einzelnen Wert langsamer als „='?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!