Mysql
 sql >> Base de données >  >> RDS >> Mysql

L'ordre des conditions dans une clause WHERE affecte-t-il les performances de MySQL ?

Voici une démo montrant l'ordre des conditions de la clause WHERE can faire une différence en raison d'un court-circuit. Il exécute les requêtes suivantes :

-- 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 seule différence entre ceux-ci est l'ordre des opérandes dans le OR état.

myslowfunction dort délibérément pendant une seconde et a pour effet secondaire d'ajouter une entrée à une table de journal à chaque fois qu'il est exécuté. Voici les résultats de ce qui est consigné lors de l'exécution des deux requêtes :

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

Ce qui précède montre qu'une fonction lente est exécutée plus de fois lorsqu'elle apparaît sur le côté gauche d'un OR condition lorsque l'autre opérande n'est pas toujours vrai.

Alors IMO la réponse à la question :

est "Parfois, ça peut faire."