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