J'ai cherché à améliorer les performances sur une série de procédures, et récemment un collègue a mentionné qu'il avait réalisé des améliorations significatives des performances lors de l'utilisation d'un INNER JOIN à la place d'EXISTS.
Dans le cadre de l'enquête sur les raisons de cette situation, j'ai pensé poser la question ici.
Donc:
Et vraiment, toute autre expérience que les gens peuvent apporter à cette question.
J'apprécierais que des réponses puissent répondre spécifiquement à cette question sans aucune suggestion d'autres améliorations possibles des performances. Nous avons déjà eu un certain succès, et je m'intéressais simplement à cet élément.
Toute aide serait très appréciée.
En général, INNER JOIN
et EXISTS
sont des choses différentes.
Le premier retourne les doublons et les colonnes des deux tables, le second retourne un enregistrement et, étant un prédicat, retourne les enregistrements d'une seule table.
Si vous effectuez une jointure interne sur une colonne UNIQUE
, ils présentent les mêmes performances.
Si vous effectuez une jointure interne sur un jeu d'enregistrements avec DISTINCT
appliqué (pour supprimer les doublons), EXISTS
est généralement plus rapide.
IN
et EXISTS
clauses (avec une corrélation équijoin) emploient généralement l'un des plusieurs SEMI JOIN
des algorithmes généralement plus efficaces qu'un DISTINCT
sur l'une des tables.
Voir cet article dans mon blog:
Peut-être peut-être pas.