gpt4 book ai didi

sql - 检查 varbinary(max) 列是否为 null 真的很慢

转载 作者:行者123 更新时间:2023-12-04 22:13:21 25 4
gpt4 key购买 nike

当我尝试运行以下查询(或什至尝试获取估计的执行计划)时,它非常慢,超过 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)。为什么优化器不首先使用它?这很合乎逻辑,不是吗?如果内容为空,它似乎正在检查表文件中的所有行,然后应用 WHERE FileID = '....'

最佳答案

好吧,我怀疑如果您对第一个查询执行查询计划,那么该计划将进行表扫描以查找 content = NULL,可能没有索引?另一方面,第二个查询仅对 FileID 进行查找,一旦找到就会返回。当然,如果(第一个)FileId = '5021ECD3-2012-62E0-1F12-000041CCB35A' 的内容不为空,则第二个查询将继续查找表的末尾。 FileID 是否有唯一约束?如果不是,那么您已经告诉查询优化器,表中某处可能有另一行具有此文件 ID……所以您不能责怪它查找。正如一位著名的探险家在离开帐篷时所说的......我可能会有一些时间......

如果您不确定查询计划在哪里,那么在 SSMS 中,查询,显示查询计划

HTH

关于sql - 检查 varbinary(max) 列是否为 null 真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16942313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com