sql >> Database >  >> RDS >> Sqlserver

SQL JOIN versus IN-prestaties?

Over het algemeen geldt IN en JOIN zijn verschillende zoekopdrachten die verschillende resultaten kunnen opleveren.

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

is niet hetzelfde als

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

, tenzij b.col is uniek.

Dit is echter het synoniem voor de eerste zoekopdracht:

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

Als de deelnamekolom UNIQUE is en als zodanig gemarkeerd, leveren beide zoekopdrachten hetzelfde plan op in SQL Server .

Zo niet, dan IN is sneller dan JOIN op DISTINCT .

Zie dit artikel in mijn blog voor prestatiedetails:

  • IN vs. JOIN vs. EXISTS


  1. Waarom wordt de uitvoeringstijd van de opgeslagen procedure in Oracle aanzienlijk verlengd, afhankelijk van hoe deze wordt uitgevoerd?

  2. SQLskills Wait Types Library toont nu SentryOne-gegevens

  3. Zoeken naar tekst in Oracle Stored Procedures

  4. Virtuele kolommen en functionele indexen