为什么向查询添加 nolock 会导致它增加执行时间?
UPDATE TargetTable
SET col1 = c1.RowCnt,
col2 = c2.RowCnt
from TargetTable tt
join
(
select col3, RowCnt = NULLIF(COUNT(*),0) from Table2 (nolock)
group by col3
) c1 on c1.col3 = tt.ID
join
(
select col4, RowCnt = NULLIF(COUNT(*),0) from Table2 (nolock)
group by col4
) c2 on c2.col4 = tt.ID
WHERE timestamp BETWEEN @FromDate AND @ToDate
AND (tt.Client_ID = @Client_ID)
最佳答案
NOLOCK 提示允许 Allocation Order Scans .因此,他们可能会创建一个完全不同的执行计划,一个预期会更快但结果却更慢的计划(例如,由于陈旧的统计数据导致基数估计错误)。与任何性能问题一样,使用调查方法找出问题的原因。 Waits and Queues是一种很好的方法。
关于SQL:NOLOCK 导致查询变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496301/