L'impact de l'ordre des conditions de la clause WHERE sur les performances de MySQL
Lors de l'élaboration de requêtes complexes avec plusieurs conditions, l'ordre de ces conditions peut potentiellement influencer Les performances de MySQL. Une condition particulière, telle que le filtrage par ID d'entreprise, peut réduire considérablement le nombre de lignes examinées.
Question :
Considérez les deux requêtes suivantes avec un ordre de conditions différent :
Requête 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
Requête 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)
L'ordre de ces conditions a-t-il un impact sur l'efficacité de MySQL ?
Réponse :
L'ordre des conditions de la clause WHERE peut en effet affecter Performances MySQL dans certaines circonstances. Prenons l'exemple suivant :
Requête 3 :
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
Requête 4 :
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
La seule différence entre ces requêtes est l'ordre des opérandes dans la condition OU . "myslowfunction" est une fonction qui retarde intentionnellement une seconde. L'exécution de la requête révèle que :
Cela démontre que lorsqu'une fonction lente apparaît à gauche d'une condition OU avec un opérande qui n'est pas toujours vrai, la fonction est exécutée plus souvent.
Conclusion :
En résumé, l'ordre des conditions dans une clause WHERE peut influencer les performances de MySQL en raison d'un court-circuit. Pour optimiser les performances, placez les conditions susceptibles de réduire considérablement le nombre de lignes examinées (par exemple, l'ID de l'entreprise) le plus tôt possible dans la chaîne de conditions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!