Heim >Datenbank >MySQL-Tutorial >Wie wirkt sich die Bedingungsreihenfolge der WHERE-Klausel auf die MySQL-Abfrageleistung aus?

Wie wirkt sich die Bedingungsreihenfolge der WHERE-Klausel auf die MySQL-Abfrageleistung aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 12:31:14915Durchsuche

How Does WHERE Clause Condition Ordering Affect MySQL Query Performance?

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:

  • Abfrage 3: myslowfunction wird viermal aufgerufen (myint-Werte 1, 2, 3, 4).
  • Abfrage 4: myslowfunction wird siebenmal aufgerufen ( myint-Werte 1, 2, 3, 4, 5, 6, 7).

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn