Maison > base de données > tutoriel mysql > Performances SQL : quand UNION est-il meilleur que OR ?

Performances SQL : quand UNION est-il meilleur que OR ?

DDD
Libérer: 2025-01-14 11:45:43
original
296 Les gens l'ont consulté

SQL Performance: When Is UNION Better Than OR?

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal