首页 > 解决方案 > SQL Server 中 WITH(NOLOCK) 的使用

问题描述

我有一个关于WITH (NOLOCK / READPAST)在 SQL Server 中使用的问题。

当我WITH (NOLOCK / READPAST)在一个或两个表上使用提示时,并且我在 JOIN 中有其他表时,我应该对所有表使用该提示,还是只对我知道有此需求的表使用该提示?

标签: sql-servernolock

解决方案


正如 GSerg 在评论表提示中指出的那样,每个表都使用。

OP 评论说她/他正在使用它来阅读日志。我假设日志表不是“索引丰富”的原因有很多,主要是插入性能。

(NOLOCK)很少或没有索引查询该日志将是一件痛苦的事情,并且很容易退化为表扫描,在一个被大量更新(通过插入)的表上执行它确实会导致 a是合理的少数情况之一。

在连接中的任何表上使用提示,您不怕脏读或丢失锁定行。

编辑

Jeroen 和 Lamu 在评论中为我们提供了一些很好的见解。我知道很多时候我们无法改变模式,只能适应并尽力做到最好。但是,如果您可以通过更改表/模式来改进您的日志记录/审计功能,请执行此操作。


推荐阅读