说白了,使用的缺点和优点是什么
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
在.NET应用程序和报告服务应用程序的查询中?
说白了,使用的缺点和优点是什么
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
在.NET应用程序和报告服务应用程序的查询中?
当前回答
在源不太可能改变的情况下使用READ_UNCOMMITTED。
读取历史数据时。例如,两天前发生的一些部署日志。 再次读取元数据时。例如,基于元数据的应用。
当你知道在获取操作过程中源可能会改变时,不要使用READ_UNCOMMITTED。
其他回答
它的优点是在某些情况下可以更快。缺点是结果可能是错误的(还没有提交的数据可能会返回),并且不能保证结果是可重复的。
如果你在乎准确性,就不要用这个。
更多信息请参阅MSDN:
实现脏读或隔离级别0锁定,这意味着不发布共享锁,也不使用排他锁。当设置此选项时,可以读取未提交或脏数据;在事务结束之前,数据中的值可以更改,数据集中的行可以出现或消失。此选项与在事务中的所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是四个隔离级别中限制最少的一个。
我现在总是使用READ UNCOMMITTED。速度快,问题少。当使用其他隔离时,你几乎总是会遇到一些阻塞问题。
只要你使用自动递增字段,多注意一下插入,你就可以和阻塞问题说再见了。
你可以用READ uncommitted犯错误,但老实说,确保你的插入是完全证明是很容易的。使用选择结果的插入/更新只是你需要注意的事情。(此处使用READ COMMITTED,或确保脏读不会引起问题)
所以去脏读吧(特别是大报告),你的软件会运行得更流畅……
关于报告,我们在所有报告查询上使用它,以防止查询陷入数据库。我们可以这样做,因为我们提取的是历史数据,而不是精确到微秒的数据。
这对于查看长插入查询的进度,进行粗略估计(如COUNT(*)或粗略SUM(*))等非常有用。
换句话说,脏读查询返回的结果是好的,只要您将它们视为估值,并且不基于它们做出任何关键决策。
在源不太可能改变的情况下使用READ_UNCOMMITTED。
读取历史数据时。例如,两天前发生的一些部署日志。 再次读取元数据时。例如,基于元数据的应用。
当你知道在获取操作过程中源可能会改变时,不要使用READ_UNCOMMITTED。