SQL Server - Dirty Reads Pros&Cons

Sei*_*bar 9 sql sql-server

我为什么要或不应该使用脏读:

set transaction isolation level read uncommitted
Run Code Online (Sandbox Code Playgroud)

在SQL Server中?

Yaa*_*lis 15

来自MSDN:

设置此选项后,可以读取未提交或脏的数据; 可以更改数据中的值,并且在事务结束之前,行可以在数据集中显示或消失.

简单地说,当您使用此隔离级别,并且作为一个事务的一部分在活动表上执行多个查询时,无法保证在事务的不同部分中返回给您的信息将保持不变.您可以在一个事务中两次查询相同的数据并获得不同的结果(这可能发生在其他用户在您的事务中更新相同数据的情况下).这显然会对依赖数据完整性的应用程序部分产生严重影响.


小智 6

通常,当您需要对繁忙的表执行大量(或频繁)查询时,提交的读取可能会被来自未通信事务的锁阻塞,但只有当您可以处理不准确的数据时.

作为一个例子,在我最近工作的游戏网站上有一些关于最近游戏的一些统计数据的摘要显示,这都是基于脏读,对我们来说更重要的是包括然后排除尚未提交的交易数据(无论如何,我们知道很少(如果有的话)交易会退出),我们觉得平均来说数据会更准确.