在JOIN查询中的某些表上使用WITH(NOLOCK)

时间:2017-11-03 09:44:05

标签: sql-server isolation-level nolock

我已经读过这个和事务隔离级别,只是想知道.....

我有一些查询产品,类别,位置和查询股票。 现在产品,类别和位置数据很少发生变化,但正如您可以想象的那样,库存确实如此。 在产品,类别,地点上指定WITH (NOLOCK)但是没有在库存中指定它是否合理? 我已经完成了一些时间,似乎确实提高了性能,所以我很谨慎。

我的理解是,如果我没有在Stock上指定WITH (NOLOCK),那应该只获得已提交的事务而不会有脏读。 同时,由于其他表格内容很少更改,因此可以安全地指定WITH (NOLOCK)

我正在处理的特定proc不会写入任何提到的表....它会将一些结果放入#table并从中返回行。

你的想法很受欢迎。

1 个答案:

答案 0 :(得分:1)

用NOLOCK只放锁Sch-S(架构稳定性)

没有NOLOCK S锁+ Sch-S 但是NOLOCK给出了READ UNCOMMITTED数据(脏读),它会给你不正确的数据。

https://sqlstudies.com/2015/03/18/why-not-nolock/

使用RSCI(读提交快照隔离)读取提交隔离级别的行版本实现 https://sqlperformance.com/2014/05/t-sql-queries/read-committed-snapshot-isolation