2015-10-07 79 views
2

在一个巨大的数据库上进行woking我正在提取大量的数据。例如我的查询是为什么nolock在查询数据库时很重要

select * from temp 

这是造成我的应用程序的用户错误,然后我意识到,我是因为我的查询时间太长的时间来提取数据。

然后我修改我的查询与

select * from temp with(nolock) 

,然后一切顺利。有人请解释为什么nolock如此重要。

回答

5

NOLOCK覆盖,以确保您从数据库中读取的数据是一致的规则和尊重ACID规则(A tomicity,C一致性,I solation,D可用性)。

如果你运行一个查询没有NOLOCK,那么你将总是得到相同的结果返回(假设别人删除或在此期间更新的任何数据)。

如果您运行查询WITHNOLOCK两次或更多,您的结果可能会有所不同。

NOLOCK实际上意味着您告诉DB返回它可以读取的数据,而不管它是否被提交到数据库中。

因此,总而言之:NOLOCK是非常重要的,如果你想准确数据与否。如果你想只是数据,那么你可以使用NOLOCK,但它通常不是一个好主意。

+1

您的回答似乎与您的意思相反。 'NOLOCK'不能确保数据一致。获得一致的数据是默认行为。 – hvd

+0

@ hvd你是对的,它真的很早,并没有我的咖啡。将更正,谢谢你的慷慨。 –

+0

答案表示它覆盖了获取一致数据的规则。所以,这意味着NOLOCK让我们得到不一致的数据。所以,答案是完美的 –

1

WITH(nolock)提示是针对特定表或视图的显式命令,用于针对查询的视图内的表或表设置事务隔离级别。一旦发布,锁将不会用于表中的数据。这样做的好处是不会有任何其他针对该表运行的查询发生死锁。另一个间接优点是,为了对该数据保留锁,将使用较少的内存

0

对于在MIS报告中使用的查询,数据中的某些更改不会影响管理决策,您可以使用NOLOCK。

但是,您不应将NOLOCK用于操作查询和操作报告。这可能会影响运营并且存在风险

相关问题