sql - tutorial - Un INNER JOIN peut-il offrir de meilleures performances que EXISTS




sql join 3 tables (2)

Peut-être peut-être pas.

  • Le même plan sera généré le plus probable
  • Un INNER JOIN peut nécessiter un DISTINCT pour obtenir le même résultat
  • EXISTS traite avec NULL

J'ai étudié des moyens d'améliorer les performances d'une série de procédures et un collègue a récemment mentionné qu'il avait considérablement amélioré ses performances en utilisant un INNER JOIN à la place de EXISTS.

Dans le cadre de l’enquête sur les raisons de cette situation, j’ai pensé poser la question ici.

Alors:

  • Un INNER JOIN peut-il offrir de meilleures performances que EXISTS?
  • Quelles circonstances cela arriverait-il?
  • Comment puis-je configurer un cas de test comme preuve?
  • Avez-vous des liens utiles vers d'autres documents?

Et vraiment, toute autre expérience que les gens peuvent apporter à cette question.

Je serais reconnaissant si des réponses pourraient aborder cette question spécifiquement sans aucune suggestion d'autres améliorations possibles de performance. Nous avons déjà eu pas mal de succès et je ne m'intéressais qu'à cet élément.

Toute aide serait très appréciée.


De manière générale, INNER JOIN et EXISTS sont des choses différentes.

La première renvoie les doublons et les colonnes des deux tables, la dernière renvoie un enregistrement et, en tant que prédicat, renvoie les enregistrements d'une seule table.

Si vous effectuez une jointure interne sur une colonne UNIQUE , elles affichent les mêmes performances.

Si vous faites une jointure interne sur un jeu d'enregistrements avec DISTINCT appliqué (pour supprimer les doublons), EXISTS est généralement plus rapide.

IN clauses IN et EXISTS (avec une corrélation équijointure) utilisent généralement l'un des nombreux algorithmes SEMI JOIN , généralement plus efficaces qu'un DISTINCT sur l'une des tables.

Voir cet article dans mon blog:





tsql