Maison > base de données > tutoriel mysql > Comment l'ordre des conditions de la clause WHERE affecte-t-il les performances des requêtes MySQL ?

Comment l'ordre des conditions de la clause WHERE affecte-t-il les performances des requêtes MySQL ?

Patricia Arquette
Libérer: 2024-12-29 12:31:14
original
883 Les gens l'ont consulté

How Does WHERE Clause Condition Ordering Affect MySQL Query Performance?

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
Copier après la connexion

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) 
Copier après la connexion

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;
Copier après la connexion

Requête 4 :

SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
Copier après la connexion

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 :

  • Requête 3 : ma fonction myslow est appelée quatre fois (valeurs myint 1, 2, 3, 4).
  • Requête 4 : ma fonction myslow est appelée sept fois ( myint valeurs 1, 2, 3, 4, 5, 6, 7).

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal