"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > L'ordre des conditions dans un MySQL où la clause a-t-elle un impact sur les performances de la requête?

L'ordre des conditions dans un MySQL où la clause a-t-elle un impact sur les performances de la requête?

Publié le 2025-03-23
Parcourir:138

Does the Order of Conditions in a MySQL WHERE Clause Impact Query Performance?

Ordre des conditions dans MySQL où les clauses et les performances

Lors de l'élaboration de requêtes de base de données complexes avec de nombreuses conditions, l'ordre de ces conditions peut potentiellement avoir un impact sur les performances de MySQL. Un scénario commun implique une combinaison de conditions larges et restrictives. La question se pose: est-ce important si la condition restrictive apparaît en premier ou en dernier dans la clause WHERE?

La réponse n'est pas toujours simple. Dans certaines situations, l'ordre peut affecter les performances en raison d'un comportement de court-circuit. Considérez les 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
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) 

Dans la première requête, la condition de l'entreprise est vérifiée en dernier, provoquant potentiellement MySQL à rechercher un grand nombre de lignes avant de réduire les résultats. Dans la deuxième requête, la condition de l'entreprise est évaluée en premier, ce qui peut réduire considérablement le nombre de lignes qui doivent être traitées.

Cette optimisation se produit parce que MySQL utilise une logique de court-circuiter dans l'évaluation de la clause Where. Si la condition de l'entreprise échoue pour une ligne donnée, MySQL ne procédera pas à l'évaluation des conditions restantes de cette ligne.

, il est important de noter que cet avantage de performance peut ne pas toujours être significatif, surtout si la condition restrictive n'est pas hautement sélective (c'est-à-dire, alors qu'il n'élimine pas le nombre de conditions). n'est pas une règle générale qui peut être appliquée dans tous les cas. Il est préférable d'effectuer des tests de performances sur des requêtes spécifiques pour déterminer si la réorganisation des conditions fournit des améliorations notables.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3