sql >> Databáze >  >> RDS >> Sqlserver

Výkon SQL JOIN vs IN?

Obecně řečeno, IN a JOIN jsou různé dotazy, které mohou přinést různé výsledky.

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

není totéž jako

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

, pokud není b.col je jedinečný.

Toto je však synonymum pro první dotaz:

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

Pokud je spojovací sloupec UNIQUE a označeny jako takové, oba tyto dotazy poskytují stejný plán v SQL Server .

Pokud není, pak IN je rychlejší než JOIN na DISTINCT .

Podrobnosti o výkonu naleznete v tomto článku na mém blogu:

  • IN vs. JOIN vs. EXISTS


  1. SQL UNION Cheat Sheet s 10 snadnými a užitečnými tipy

  2. Jak odstranit omezení cizího klíče v SQL

  3. Použití proměnné env v application.properties Spring Boot

  4. Jak opravit „Schéma oddílů ‚…‘ nemá žádnou další použitou skupinu souborů“ v SQL Server