나는이 테이블을 가지고있다 :
CREATE TABLE [dbo].[Accounts] (
[AccountId] UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWID(),
-- WHATEVER other columns
);
GO
CREATE UNIQUE CLUSTERED INDEX [AccountsIndex]
ON [dbo].[Accounts]([AccountId] ASC);
GO
이 쿼리 :
DECLARE @result UNIQUEIDENTIFIER
SELECT @result = AccountId FROM Accounts WHERE AccountId='guid-here'
예상대로 단일 인덱스 검색으로 구성된 쿼리 계획으로 실행합니다.
SELECT <---- Clustered Index Seek
이 쿼리는 동일한 작업을 수행합니다.
DECLARE @result UNIQUEIDENTIFIER
SET @result = (SELECT AccountId FROM Accounts WHERE AccountId='guid-here')
그러나 Index Seek의 결과가 Outer Outer Joined 된 Constant Scan 결과와 함께 계산 스칼라에 공급되는 계획으로 실행됩니다.
SELECT <--- Compute Scalar <--- Left Outer Join <--- Constant Scan
^
|------Clustered Index Seek
그 여분의 마술은 무엇입니까? Constant Scan 다음에 Left Outer Join이 수행하는 작업은 무엇입니까?