在一个巨大的数据库上进行woking我正在提取大量的数据。例如我的查询是为什么nolock在查询数据库时很重要
select * from temp
这是造成我的应用程序的用户错误,然后我意识到,我是因为我的查询时间太长的时间来提取数据。
然后我修改我的查询与
select * from temp with(nolock)
,然后一切顺利。有人请解释为什么nolock如此重要。
在一个巨大的数据库上进行woking我正在提取大量的数据。例如我的查询是为什么nolock在查询数据库时很重要
select * from temp
这是造成我的应用程序的用户错误,然后我意识到,我是因为我的查询时间太长的时间来提取数据。
然后我修改我的查询与
select * from temp with(nolock)
,然后一切顺利。有人请解释为什么nolock如此重要。
当你说NOLOCK并执行你的查询,那就像使用READ UNCOMMITED数据。因此,您已准备好读取未提交的数据以及可以回滚的数据。所以你有阅读脏数据的风险。
你可以参考:
NOLOCK
覆盖,以确保您从数据库中读取的数据是一致的规则和尊重ACID规则(A tomicity,C一致性,I solation,D可用性)。
如果你运行一个查询没有NOLOCK
,那么你将总是得到相同的结果返回(假设别人删除或在此期间更新的任何数据)。
如果您运行查询WITHNOLOCK
两次或更多,您的结果可能会有所不同。
NOLOCK
实际上意味着您告诉DB返回它可以读取的数据,而不管它是否被提交到数据库中。
因此,总而言之:NOLOCK
是非常重要的,如果你想准确数据与否。如果你想只是数据,那么你可以使用NOLOCK
,但它通常不是一个好主意。
WITH(nolock)提示是针对特定表或视图的显式命令,用于针对查询的视图内的表或表设置事务隔离级别。一旦发布,锁将不会用于表中的数据。这样做的好处是不会有任何其他针对该表运行的查询发生死锁。另一个间接优点是,为了对该数据保留锁,将使用较少的内存
对于在MIS报告中使用的查询,数据中的某些更改不会影响管理决策,您可以使用NOLOCK。
但是,您不应将NOLOCK用于操作查询和操作报告。这可能会影响运营并且存在风险
您的回答似乎与您的意思相反。 'NOLOCK'不能确保数据一致。获得一致的数据是默认行为。 – hvd
@ hvd你是对的,它真的很早,并没有我的咖啡。将更正,谢谢你的慷慨。 –
答案表示它覆盖了获取一致数据的规则。所以,这意味着NOLOCK让我们得到不一致的数据。所以,答案是完美的 –