私はこの表を持っています:
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')
ただし、インデックスシークの結果が左外部結合の結果とコンスタントスキャンの結果と結合され、その後Compute Scalarに入力されるプランで実行されます。
SELECT <--- Compute Scalar <--- Left Outer Join <--- Constant Scan
^
|------Clustered Index Seek
その余分な魔法は何ですか?左外部結合が続くコンスタントスキャンは何をしますか?