带有 (NOLOCK) 提示的 SQL 服务器
Posted
技术标签:
【中文标题】带有 (NOLOCK) 提示的 SQL 服务器【英文标题】:SQL server with (NOLOCK) hint 【发布时间】:2014-10-01 08:25:03 【问题描述】:有人能解释一下在 SQL 查询中使用 with (NOLOCK) 是否真的会使它们运行得更快吗?如果是这样,为什么?
【问题讨论】:
您阅读过文档吗? 您可能希望在将它们弹出到您的代码库之前阅读此内容,特别是如果您不确定它们的作用:blogs.msdn.com/b/davidlean/archive/2009/04/06/… 同一问题有多个重复,您应该在发布重复之前参考它们。 【参考方案1】:使用NOLOCK
本身并不会加快您的个人查询速度。但它允许其他查询访问同一个表,从而减少了因死锁而损失的时间。
当一个客户端选择更新表并花费大量时间来完成事务时,这特别有用。使用NOLOCK
命令,其他客户端可以执行尝试访问表的查询。他们不必等待更新完成,因此即使一个事务仍在进行中,其他事务也可以完成。
这并不意味着使用NOLOCK
命令可以提高单个查询的性能。它只是提高了涉及多个客户端或正在执行批处理的整体性能。
但是,您需要注意使用NOLOCK
时的脏读风险。 Here's a good article 解释了为什么您通常应该避免使用 NOLOCK
。
【讨论】:
【参考方案2】:带(无锁)(source):
不要发布共享锁,也不要使用独占锁。当此选项生效时,可以读取未提交的事务或在读取过程中回滚的一组页面。脏读是可能的。仅适用于 SELECT 语句。
【讨论】:
以上是关于带有 (NOLOCK) 提示的 SQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server NOLOCK 提示会返回部分写入的行吗?
[SQL SERVER][Performance]小心使用With NoLock