我有这张桌子:
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')
但是它是通过以下计划执行的:将“索引搜索”的结果与某些“恒定扫描”的结果进行“左外连接”,然后馈入“计算标量”:
SELECT <--- Compute Scalar <--- Left Outer Join <--- Constant Scan
^
|------Clustered Index Seek
那额外的魔力是什么?持续扫描后跟左外部联接有什么作用?