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-27 14:35:10
original
843 Les gens l'ont consulté

How Does the Order of WHERE Clause Conditions Affect MySQL Query Performance?

Impact de l'ordre des conditions de la clause WHERE sur les performances de MySQL

Lors de la création de requêtes complexes avec de nombreuses conditions, l'ordre dans lequel vous spécifiez ces conditions peut impacter les performances de MySQL. Bien que l'ordre fasse généralement peu de différence pour des conditions simples, il devient plus significatif lorsqu'une condition réduit considérablement l'ensemble de résultats.

Considérez les deux requêtes suivantes :

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

Dans dans les deux requêtes, nous recherchons des lignes répondant à des critères spécifiques dans plusieurs champs à l'aide de conditions OU. Alors que la première condition produit généralement un ensemble de résultats volumineux, la condition « entreprise » restreint les résultats à un ensemble beaucoup plus restreint.

Selon le plan d'exécution de MySQL, elle suit un ordre d'évaluation de gauche à droite pour les conditions WHERE. . Cela signifie que lors de la première requête, MySQL exécutera la condition « société » avant d'appliquer les conditions OR. Si la condition « entreprise » renvoie un petit nombre de lignes, MySQL les indexera pour plus d'efficacité, réduisant ainsi la surcharge de traitement des conditions OR suivantes.

En revanche, la deuxième requête a la condition « entreprise » répertoriée après les conditions de la salle d’opération. En conséquence, MySQL exécutera d'abord les conditions OR, traitant potentiellement un plus grand nombre de lignes et créant un index temporaire si nécessaire. Cette étape d'indexation supplémentaire peut augmenter la surcharge des requêtes.

Court-circuit et impact sur les performances

Il est important de noter que l'ordre des conditions de la clause WHERE peut également affecter les performances dans les cas où se produit un court-circuit. Lorsqu'une condition est évaluée comme étant vraie, MySQL renvoie immédiatement vrai pour l'ensemble de la condition, en contournant l'évaluation des conditions suivantes.

Par exemple, considérons la requête suivante :

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

Si " myint >= 3" est évalué à true pour une ligne donnée, MySQL n'exécutera pas l'appel "myslowfunction", ce qui prend du temps. Cependant, si "myslowfunction" apparaît sur le côté gauche de la condition OR, elle sera exécutée pour toutes les lignes, même celles qui ne remplissent pas la condition "myint >= 3".

Conclusion

Bien que l'ordre des conditions de la clause WHERE ait généralement un impact minimal sur les performances, il peut devenir un facteur dans les cas où une condition réduit considérablement l'ensemble de résultats ou où il s'agit d'un court-circuit. En plaçant les conditions les plus restrictives au début de la clause WHERE, vous pouvez potentiellement améliorer les performances et l'efficacité des requêtes.

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