49 votes

Performances SQL sur LEFT OUTER JOIN vs NOT EXISTS

Si je veux trouver un ensemble d'entrées dans le tableau A mais pas dans le tableau B, je peux utiliser soit LEFT OUTER JOIN soit NOT EXISTS. J'ai entendu dire que SQL Server est orienté vers ANSI et, dans certains cas, les LEFT OUTER JOIN sont beaucoup plus efficaces que NOT EXISTS. ANSI JOIN sera-t-il plus performant dans ce cas ? et les opérateurs de jointure sont-ils plus efficaces que NOT EXISTS en général sur SQL Server ?

7voto

Joe Stefanelli Points 72874

La meilleure discussion que j'ai lue sur ce sujet pour SQL Server est ici .

2voto

Tom H. Points 23783

Personnellement, je pense que celui-ci devient un gros vieux, "Ça dépend". J'ai vu des cas où chaque méthode a surpassé l'autre.

Votre meilleur pari est de tester les deux et de voir lequel fonctionne le mieux. S'il s'agit d'une situation où les tables seront toujours petites et que les performances ne sont pas aussi cruciales, je choisirais simplement celle qui vous semble la plus claire (c'est généralement NOT EXISTS pour la plupart des gens) et passer à autre chose.

0voto

N30 Points 1287

Cette entrée de blog donne des exemples de différentes manières ( NOT IN , OUTER APPLY , LEFT OUTER JOIN , EXCEPT et NOT EXISTS ) pour obtenir les mêmes résultats et prouve que Not Exists ( Left Anti Semi Join ) est la meilleure option à la fois dans le cache froid et le cache chaud scénarios.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X