NOLOCK与事务隔离级别(NOLOCK vs. Transaction Isolation Lev

2019-06-23 16:31发布

什么是使用“事务隔离级别设置读取未提交”和NOLOCK之间的区别? 这个比那个好吗?

Answer 1:

他们是同样的事情,只是范围的不同。 NOLOCK被放置在每个表的基础上,并SET Transaction...可以放置为一个块。



Answer 2:

NOLOCK是查询提示,因此仅适用于specifc表中被指定它的查询中。

设置事务隔离级别适用于当前连接内或直至它被明确修改的执行,因此提出的所有代码。

为了澄清,在功能上工作isoloation水平是其上覆盖可能并不相同但是范围。



Answer 3:

见这个答案从几个小时前,这个问题引起阻塞SQL Server的SELECT语句 。

引用莱姆斯Rusanu ;

SELECT可以阻止更新。 一个设计合理的数据模型和查询只会造成最小的阻塞,而不是一个问题。 在“常用”使用NOLOCK提示是几乎总是错误的答案。 正确的答案是调整你的查询,以便它不会扫描巨大的表。

如果查询是不可调节,那么你应该首先考虑快照隔离级别,第二个你应该考虑使用数据库快照和最后的选择应该是脏读(并且是更好的改变隔离级别而不是使用NOLOCK提示)。 需要注意的是脏读,正如其名称中明确规定,将返回不一致的数据(例如,您的总表可能是不平衡)。

其他答案可以帮助你。



Answer 4:

它们具有相同的效果,只有一个用作锁提示(NOLOCK),另一个被用于连接范围。

小心这类原因 - 脏读可以根据您的应用程序非常糟糕的事情。 读同一记录两次或丢失的记录,因为网页的运动可以是一个非常令人困惑的事情给用户...



文章来源: NOLOCK vs. Transaction Isolation Level