LEFT OUTER JOIN vs. NOT EXISTS : Considérations sur les performances
Lors de la comparaison de données entre deux tables, la sélection d'éléments qui existent dans l'une mais pas dans la d'autres peuvent être obtenus via une sous-requête LEFT OUTER JOIN ou NOT EXISTS. Bien que certains puissent spéculer que les JOIN conformes à la norme ANSI, telles que les LEFT OUTER JOIN, fonctionnent mieux sur SQL Server, les performances réelles dépendent de divers facteurs.
En général, si les champs impliqués ont des index appropriés et que vous prévoyez de les filtrer. une partie substantielle des données, NOT EXISTS a tendance à offrir de meilleures performances. En effet, NOT EXISTS, comme EXISTS, exploite le court-circuit : dès qu'une correspondance est trouvée pour un enregistrement, elle est soit incluse, soit exclue, et l'optimiseur passe à l'enregistrement suivant.
En revanche, Les LEFT JOIN récupèrent tous les enregistrements, qu'ils correspondent ou non, filtrant ensuite ceux qui ne correspondent pas. Cela peut nécessiter beaucoup de ressources si les tables sont volumineuses ou si plusieurs critères de jointure sont spécifiés.
Par conséquent, NOT EXISTS et EXISTS sont généralement préférés lorsque cela est possible. Pour SQL Server en particulier, les opérateurs IN et NOT IN, qui sont sémantiquement équivalents à NOT EXISTS, peuvent être plus pratiques à écrire et assurer un court-circuit garanti.
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!