Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

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

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

Le premier renvoie les doublons et les colonnes des deux tables, le second renvoie un enregistrement et, étant un prédicat, renvoie les enregistrements d'une seule table.

Si vous faites une jointure interne sur un UNIQUE colonne, ils affichent les mêmes performances.

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

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

Voir cet article sur mon blog :

  • IN vs JOIN vs EXISTS