我有一个关于WITH (NOLOCK / READPAST)
在 SQL Server 中使用的问题。
当我WITH (NOLOCK / READPAST)
在一个或两个表上使用提示时,并且我在 JOIN 中有其他表时,我应该对所有表使用该提示,还是只对我知道有此需求的表使用该提示?
我有一个关于WITH (NOLOCK / READPAST)
在 SQL Server 中使用的问题。
当我WITH (NOLOCK / READPAST)
在一个或两个表上使用提示时,并且我在 JOIN 中有其他表时,我应该对所有表使用该提示,还是只对我知道有此需求的表使用该提示?
正如 GSerg 在评论表提示中指出的那样,每个表都使用。
OP 评论说她/他正在使用它来阅读日志。我假设日志表不是“索引丰富”的原因有很多,主要是插入性能。
(NOLOCK)
很少或没有索引查询该日志将是一件痛苦的事情,并且很容易退化为表扫描,在一个被大量更新(通过插入)的表上执行它确实会导致 a是合理的少数情况之一。
在连接中的任何表上使用提示,您不怕脏读或丢失锁定行。
编辑
Jeroen 和 Lamu 在评论中为我们提供了一些很好的见解。我知道很多时候我们无法改变模式,只能适应并尽力做到最好。但是,如果您可以通过更改表/模式来改进您的日志记录/审计功能,请执行此操作。