说白了,使用的缺点和优点是什么

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在.NET应用程序和报告服务应用程序的查询中?


当前回答

在源不太可能改变的情况下使用READ_UNCOMMITTED。

读取历史数据时。例如,两天前发生的一些部署日志。 再次读取元数据时。例如,基于元数据的应用。

当你知道在获取操作过程中源可能会改变时,不要使用READ_UNCOMMITTED。

其他回答

它可以用于简单的表,例如仅插入的审计表,其中没有对现有行进行更新,也没有对其他表进行fk。插入是一个简单的插入,没有或很少有回滚的机会。

我现在总是使用READ UNCOMMITTED。速度快,问题少。当使用其他隔离时,你几乎总是会遇到一些阻塞问题。

只要你使用自动递增字段,多注意一下插入,你就可以和阻塞问题说再见了。

你可以用READ uncommitted犯错误,但老实说,确保你的插入是完全证明是很容易的。使用选择结果的插入/更新只是你需要注意的事情。(此处使用READ COMMITTED,或确保脏读不会引起问题)

所以去脏读吧(特别是大报告),你的软件会运行得更流畅……

我最喜欢的read uncommitted用例是调试事务中发生的一些事情。

在调试器下启动软件,当您逐步执行代码行时,它会打开一个事务并修改数据库。当代码停止时,您可以打开一个查询分析器,将其设置为读取未提交隔离级别,并进行查询以查看发生了什么。

您还可以使用它来查看长时间运行的过程是否卡住,或者使用带有count(*)的查询正确地更新数据库。

如果您的公司喜欢创建过于复杂的存储过程,那么这是很好的选择。

在源不太可能改变的情况下使用READ_UNCOMMITTED。

读取历史数据时。例如,两天前发生的一些部署日志。 再次读取元数据时。例如,基于元数据的应用。

当你知道在获取操作过程中源可能会改变时,不要使用READ_UNCOMMITTED。

它的优点是在某些情况下可以更快。缺点是结果可能是错误的(还没有提交的数据可能会返回),并且不能保证结果是可重复的。

如果你在乎准确性,就不要用这个。

更多信息请参阅MSDN:

实现脏读或隔离级别0锁定,这意味着不发布共享锁,也不使用排他锁。当设置此选项时,可以读取未提交或脏数据;在事务结束之前,数据中的值可以更改,数据集中的行可以出现或消失。此选项与在事务中的所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是四个隔离级别中限制最少的一个。