SQL:NOLOCK 导致查询变慢

标签 sql tsql sql-server-2008

为什么向查询添加 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/

相关文章:

mysql - 何时在 SQL 查询中使用标识符

php - 如何在 SQL 中搜索列中的精确字符串

sql-server - FOR XML 无法序列化节点的数据,因为它包含 XML 中不允许的字符 (0x0001)

c# - SQL Server 2008 和连接字符串

mysql - 仅选择文本中的数字

MySql:查询优化或表的结构优化

sql-server - tsql : best way to update a db table with a csv file

.net - SQL Server - 将错误报告回 .NET

sql-server-2008 - 在 SQL Server 2012 中创建数据库,在 2008 中编写脚本并使用?

c# - 在 SQL Server 中选择整个表的最快方法是什么?