Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Leistung von SQL JOIN vs. IN?

Im Allgemeinen IN und JOIN sind unterschiedliche Abfragen, die zu unterschiedlichen Ergebnissen führen können.

SELECT  a.*
FROM    a
JOIN    b
ON      a.col = b.col

ist nicht dasselbe wie

SELECT  a.*
FROM    a
WHERE   col IN
        (
        SELECT  col
        FROM    b
        )

, es sei denn b.col ist einzigartig.

Dies ist jedoch das Synonym für die erste Abfrage:

SELECT  a.*
FROM    a
JOIN    (
        SELECT  DISTINCT col
        FROM    b
        )
ON      b.col = a.col

Wenn die Verbindungsspalte UNIQUE ist und als solche gekennzeichnet, ergeben diese beiden Abfragen denselben Plan in SQL Server .

Wenn nicht, dann IN ist schneller als JOIN auf DISTINCT .

Einzelheiten zur Leistung finden Sie in diesem Artikel in meinem Blog:

  • IN vs. JOIN vs. EXISTS