sql >> Database teknologi >  >> RDS >> Sqlserver

SQL JOIN vs IN ydeevne?

Generelt IN og JOIN er forskellige forespørgsler, der kan give forskellige resultater.

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

er ikke det samme som

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

, medmindre b.col er unik.

Dette er dog synonymet for den første forespørgsel:

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

Hvis sammenføjningskolonnen er UNIQUE og markeret som sådan, giver begge disse forespørgsler den samme plan i SQL Server .

Hvis det ikke er det, så IN er hurtigere end JOINDISTINCT .

Se denne artikel i min blog for detaljer om ydeevne:

  • IN vs. JOIN vs. EXISTS


  1. ORA-00918:kolonne er tvetydigt defineret i SELECT *

  2. mysql gemmer automatisk tidsstempel for oprettelse af rekorder

  3. Sådan opretter du en sammensat primær nøgle i SQL Server (T-SQL-eksempel)

  4. Nyt i PostgreSQL 12:Genererede kolonner