Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisez une union ou une jointure - ce qui est plus rapide

Union sera plus rapide, car il passe simplement la première instruction SELECT, puis analyse la deuxième instruction SELECT et ajoute les résultats à la fin de la table de sortie.

La jointure parcourra chaque ligne des deux tables, trouvant des correspondances dans l'autre table, nécessitant donc beaucoup plus de traitement en raison de la recherche de lignes correspondantes pour chaque ligne.

MODIFIER

Par Union, j'entends Union All car cela semblait adéquat pour ce que vous essayiez de réaliser. Bien qu'une Union normale soit généralement plus rapide qu'une Rejoindre.

EDIT 2 (répondre au commentaire de @seebiscuit)

Je ne suis pas d'accord avec lui. Techniquement parlant, quelle que soit la qualité de votre jointure, un "JOIN" est toujours plus cher qu'une pure concaténation. J'ai fait un article de blog pour le prouver sur mon blog codePERF[dot]net . En pratique, ils servent 2 objectifs complètement différents et il est plus important de s'assurer que votre indexation est correcte et d'utiliser le bon outil pour le travail.

Techniquement, je pense que cela peut être résumé en utilisant les 2 plans d'exécution suivants tirés de mon article de blog :

UNION ALL Plan d'exécution

JOIN Plan d'exécution

Résultats pratiques

En pratique, la différence sur une recherche d'index clusterisé est négligeable :