当我尝试运行以下查询(甚至尝试获取估计的执行计划)时,它非常慢,10 多分钟(我停止等待):
SELECT TOP 1 1
FROM File WITH (NOLOCK)
WHERE FileID = '5021ECD3-2012-62E0-1F12-000041CCB35A'
AND FileSize > 0
AND Content IS NULL
但是,以下是即时的:
DECLARE @test varbinary(1)
SELECT TOP 1 @test = Content
FROM File WITH (NOLOCK)
WHERE FileID = '5021ECD3-2012-62E0-1F12-000041CCB35A'
AND FileSize > 0
IF @test IS NULL
PRINT 'a'
FileID 上有一个唯一索引。内容是 varbinary(max)。为什么优化器不先使用它?这很合乎逻辑,不是吗?如果内容是否为空,它似乎正在检查表 File 中的所有行,然后应用 WHERE FileID = '....'