Ordre des conditions de la clause Where et performances MySQL
Dans les scénarios où une requête contient de nombreuses conditions et qu'une condition spécifique réduit considérablement l'ensemble de résultats, l'ordre des conditions dans la clause WHERE peut avoir un impact sur les performances de MySQL.
Considérez ce qui suit scénarios :
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 qui filtre en fonction du champ de l'entreprise est placée au début de la clause WHERE. Cette condition réduit efficacement le nombre de lignes qui doivent être évaluées pour les conditions suivantes.
Dans la deuxième requête, l'ordre des conditions est inversé. La condition qui filtre en fonction du champ de l'entreprise est évaluée après les autres conditions.
En fonction de la distribution des données, l'ordre des conditions peut affecter les performances. En plaçant la condition qui réduit considérablement le jeu de résultats au début de la clause WHERE, MySQL peut l'appliquer plus tôt et éviter d'évaluer les conditions ultérieures pour les lignes qui ne remplissent pas cette condition.
Cette optimisation est connue sous le nom de "short -circuitage." Si la condition au début est évaluée comme fausse pour une ligne donnée, MySQL supprimera immédiatement cette ligne sans évaluer les conditions restantes.
Cependant, il est important de noter que cette optimisation n'est pas toujours applicable. Si toutes les conditions ont une sélectivité similaire, l'ordre des conditions peut ne pas avoir d'impact significatif sur les performances.
Pour déterminer l'ordre optimal des conditions, tenez compte des facteurs suivants :
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!