Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL JOIN a wydajność IN?

Ogólnie rzecz biorąc, IN i JOIN to różne zapytania, które mogą dawać różne wyniki.

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

to nie to samo co

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

, chyba że b.col jest wyjątkowy.

Jest to jednak synonim pierwszego zapytania:

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

Jeśli kolumna łącząca to UNIQUE i oznaczone jako takie, oba te zapytania dają ten sam plan w SQL Server .

Jeśli nie, to IN jest szybszy niż JOIN na DISTINCT .

Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat wydajności:

  • IN w porównaniu z JOIN w porównaniu z EXISTS


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepszy odpowiednik IsInteger w SQL Server

  2. Trendy w 2020 roku, których administratorzy baz danych powinni być świadomi

  3. Jak zmienić typ danych kolumny w bazie danych SQL bez utraty danych?

  4. Przedstawiamy nową funkcję — raporty Spotlight Cloud

  5. Zapytanie SQL dla tabeli drzewa