Mysql
 sql >> Database >  >> RDS >> Mysql

L'ordine delle condizioni in una clausola WHERE influisce sulle prestazioni di MySQL?

Ecco una demo mostrando l'ordine delle condizioni della clausola WHERE può fare la differenza a causa del cortocircuito. Esegue le seguenti query:

-- 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;

L'unica differenza tra questi è l'ordine degli operandi in OR condizione.

myslowfunction dorme deliberatamente per un secondo e ha l'effetto collaterale di aggiungere una voce a una tabella di registro ogni volta che viene eseguita. Di seguito sono riportati i risultati di ciò che viene registrato durante l'esecuzione delle due query:

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

Quanto sopra mostra che una funzione lenta viene eseguita più volte quando appare sul lato sinistro di un OR condizione quando l'altro operando non è sempre vero.

Quindi IMO la risposta alla domanda:

è "A volte può fare."