Jas*_*son 19 sql sql-server transaction-isolation
使用"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"和NOLOCK之间有什么区别?这个比那个好吗?
NOLOCK是一个查询提示,因此仅适用于指定它的查询中的特定表.
设置事务隔离级别适用于在当前连接中执行的所有代码,或者直到它被明确修改.
为了澄清,在功能上,工作中的等级水平是相同的,但涵盖的范围可能不是.
请参阅几个小时前对问题SQL Server SELECT statements 导致阻塞的答案。
引用雷穆斯·鲁萨努的话:
SELECT 可以阻止更新。正确设计的数据模型和查询只会导致最小的阻塞,而不是问题。“通常”WITH NOLOCK 提示几乎总是错误的答案。正确的答案是调整您的查询,使其不会扫描巨大的表。
如果查询不可调整,那么您应该首先考虑 SNAPSHOT ISOLATION 级别,其次您应该考虑使用 DATABASE SNAPSHOTS,最后一个选项应该是 DIRTY READS(最好更改隔离级别而不是使用 NOLOCK HINT)。请注意,正如名称明确指出的那样,脏读将返回不一致的数据(例如,您的总工作表可能不平衡)。
其他答案也可能对您有帮助。