在SQL Server中使用WITH(NOLOCK)



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

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

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

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

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

在联接中的任何表上使用提示,您不怕脏读或错过锁定的行。

编辑

Jeroen和Lamu在评论中给了我们一些很好的见解。我知道很多时候我们不能改变模式,只能适应并尝试用我们所拥有的一切做到最好。但是,如果您可以通过更改表/模式来改进日志记录/审核功能,请这样做。

最新更新