Heim >Datenbank >MySQL-Tutorial >Wie wirkt sich die Bedingungsreihenfolge der WHERE-Klausel auf die MySQL-Abfrageleistung aus?
Der Einfluss der Reihenfolge der WHERE-Klausel-Bedingungen auf die MySQL-Leistung
Beim Erstellen komplexer Abfragen mit mehreren Bedingungen kann die Reihenfolge dieser Bedingungen möglicherweise Einfluss haben Die Leistung von MySQL. Eine bestimmte Bedingung, beispielsweise das Filtern nach Firmen-ID, kann die Anzahl der untersuchten Zeilen erheblich reduzieren.
Frage:
Betrachten Sie die folgenden zwei Abfragen mit unterschiedlicher Bedingungsreihenfolge:
Abfrage 1:
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh
Abfrage 2:
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar)
Hat die Reihenfolge dieser Bedingungen Auswirkungen auf die Effizienz von MySQL?
Antwort:
Die Reihenfolge der Bedingungen der WHERE-Klausel kann sich tatsächlich auswirken MySQL-Leistung unter bestimmten Umständen. Betrachten Sie das folgende Beispiel:
Abfrage 3:
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
Abfrage 4:
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Der einzige Unterschied zwischen diesen Abfragen ist die Reihenfolge der Operanden in der ODER-Bedingung . „myslowfunction“ ist eine Funktion, die absichtlich eine Sekunde verzögert. Die Abfrageausführung zeigt Folgendes:
Dies zeigt, dass, wenn eine langsame Funktion auf der linken Seite einer ODER-Bedingung mit einem Operanden erscheint, der nicht immer wahr ist, die Funktion häufiger ausgeführt wird.
Schlussfolgerung:
Zusammenfassend lässt sich sagen, dass die Reihenfolge der Bedingungen in einer WHERE-Klausel die MySQL-Leistung aufgrund von Kurzschlüssen beeinflussen kann. Um die Leistung zu optimieren, platzieren Sie Bedingungen, von denen erwartet wird, dass sie die Anzahl der untersuchten Zeilen erheblich reduzieren (z. B. Firmen-ID), so früh wie möglich in der Bedingungskette.
Das obige ist der detaillierte Inhalt vonWie wirkt sich die Bedingungsreihenfolge der WHERE-Klausel auf die MySQL-Abfrageleistung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!