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 ?
Réponses
Trop de publicités?La meilleure discussion que j'ai lue sur ce sujet pour SQL Server est ici .
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.
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.