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

Beeinflusst die Reihenfolge der Bedingungen in einer WHERE-Klausel die Leistung von MySQL?

Hier ist eine Demo zeigt die Reihenfolge der Bedingungen der WHERE-Klausel kann durch Kurzschluss einen Unterschied machen. Es führt die folgenden Abfragen aus:

-- query #1
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;

-- query #2
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

Der einzige Unterschied zwischen diesen ist die Reihenfolge der Operanden im OR Zustand.

myslowfunction schläft absichtlich eine Sekunde lang und hat den Nebeneffekt, dass jedes Mal, wenn es ausgeführt wird, ein Eintrag zu einer Protokolltabelle hinzugefügt wird. Hier sind die Ergebnisse dessen, was protokolliert wird, wenn die beiden Abfragen ausgeführt werden:

myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

Das Obige zeigt, dass eine langsame Funktion öfter ausgeführt wird, wenn sie auf der linken Seite eines OR erscheint Bedingung, wenn der andere Operand nicht immer wahr ist.

Also IMO die Antwort auf die Frage:

ist "Manchmal kann es reichen."