Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL JOIN срещу IN производителност?

Най-общо казано, IN и JOIN са различни заявки, които могат да дадат различни резултати.

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

не е същото като

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

, освен ако b.col е уникален.

Това обаче е синонимът на първата заявка:

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

Ако присъединителната колона е UNIQUE и маркирани като такива, и двете тези заявки дават един и същ план в SQL Server .

Ако не е, тогава IN е по-бързо от JOIN на DISTINCT .

Вижте тази статия в моя блог за подробности за ефективността:

  • IN срещу JOIN срещу 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. Поправка:„BACKUP LOG не може да се извърши, защото няма текущо архивиране на базата данни.“ в SQL Server/SQL Edge

  2. Как да коригирате „Отказът ALTER TABLE SWITCH не е успешен“

  3. SQL Server 2016:Създайте таблица от SQL скрипт

  4. Как да генерирате изявление за добавяне на колона за всички таблици в база данни в SQL Server - SQL Server / T-SQL урок, част 49

  5. най-добрият начин за конвертиране и валидиране на низ от дата