Performances SQL : La polémique entre UNION et OR
Penser simplement que le remplacement des instructions OR par des UNION améliorera les performances SQL est une simplification excessive. Cependant, comprendre les nuances de leur utilisation peut conduire à des améliorations significatives des performances.
Comprendre les différences
OR exécute une seule requête et récupère les lignes qui satisfont à l'une ou l'autre des conditions. UNION, quant à lui, exécute deux requêtes distinctes et combine leurs résultats. Cette distinction devient critique lorsque l'OR implique plusieurs colonnes.
Considérez la requête hypothétique suivante :
<code class="language-sql">select username from users where company = 'bbc' or city = 'London';</code>
Si les colonnes entreprise et ville ont des index, MySQL doit choisir un index. Cela peut entraîner une analyse complète de la table d'une autre colonne.
L'UNION comme solution
UNION résout ce problème en détachant la requête :
<code class="language-sql">select username from users where company = 'bbc' union select username from users where city = 'London';</code>
Chaque sous-requête utilise efficacement son index respectif, et le résultat final est l'union des deux ensembles.
Remarques sur le tri
UNION nécessite un tri pour éliminer les doublons dans l'ensemble de résultats. Cependant, comme UNION se concentre sur un ensemble plus petit de lignes, la surcharge est généralement négligeable. Dans la plupart des cas où une clause WHERE affecte une table, le coût d'une analyse complète de la table peut dépasser le coût d'un tri UNION.
Conclusion
UNION n’est absolument pas meilleur que OR. Cependant, il peut optimiser les performances lorsque OR implique des prédicats sur des colonnes avec des index en conflit. Comprendre ces nuances est essentiel pour écrire des requêtes SQL efficaces.
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!