sql >> Databasteknik >  >> RDS >> Sqlserver

SQL JOIN vs IN prestanda?

Generellt sett, IN och JOIN är olika frågor som kan ge olika resultat.

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

är inte samma sak som

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

, såvida inte b.col är unik.

Detta är dock synonymen till den första frågan:

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

Om sammanfogningskolumnen är UNIQUE och markerade som sådana, ger båda dessa frågor samma plan i SQL Server .

Om det inte är det, IN är snabbare än JOINDISTINCT .

Se den här artikeln i min blogg för information om prestanda:

  • IN kontra JOIN kontra EXISTS


  1. Hur man hittar namnet på en begränsning i PostgreSQL

  2. 3 sätt att ersätta NULL med "N/A" i SQLite

  3. Isoleringsnivån Läs oengagerad

  4. Inaktivera ONLY_FULL_GROUP_BY