sql >> Base de Datos >  >> RDS >> Mysql

¿El orden de las condiciones en una cláusula WHERE afecta el rendimiento de MySQL?

Aquí hay una demostración mostrando el orden de las condiciones de la cláusula WHERE can hacer una diferencia debido a un cortocircuito. Ejecuta las siguientes consultas:

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

La única diferencia entre estos es el orden de los operandos en OR condición.

myslowfunction duerme deliberadamente por un segundo y tiene el efecto secundario de agregar una entrada a una tabla de registro cada vez que se ejecuta. Estos son los resultados de lo que se registra al ejecutar las dos consultas:

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

Lo anterior muestra que una función lenta se ejecuta más veces cuando aparece en el lado izquierdo de un OR condición cuando el otro operando no siempre es verdadero.

Entonces, en mi opinión, la respuesta a la pregunta:

es "A veces puede funcionar".