Sql 为什么在查询数据库时nolock很重要

Sql 为什么在查询数据库时nolock很重要,sql,sql-server-2008,Sql,Sql Server 2008,在一个巨大的数据库上工作时,我提取了大量的数据。例如,我的查询是 select * from temp 这给我的应用程序用户造成了错误,然后我意识到这是因为我的查询提取数据花费了太长的时间 然后我用 select * from temp with(nolock) 然后一切都很顺利。有人请解释一下为什么nolock如此重要。当您使用nolock并执行查询时,这就像使用读取未限制的数据一样。因此,您已经准备好读取可以回滚的未提交数据。因此,您有读取脏数据的风险 你可以参考: NOLOCK覆

在一个巨大的数据库上工作时,我提取了大量的数据。例如,我的查询是

select * from temp
这给我的应用程序用户造成了错误,然后我意识到这是因为我的查询提取数据花费了太长的时间

然后我用

select * from temp with(nolock)

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

当您使用nolock并执行查询时,这就像使用读取未限制的数据一样。因此,您已经准备好读取可以回滚的未提交数据。因此,您有读取脏数据的风险

你可以参考:


NOLOCK
覆盖确保从数据库中读取的数据一致并遵守规则的规则(Atomicity,Consistency,Isolation,Durability)

如果您在不使用NOLOCK的情况下运行查询,那么您将始终得到相同的结果(假设在此期间没有其他人删除或更新任何数据)

如果使用
NOLOCK
运行查询两次或两次以上,结果可能会有所不同

NOLOCK
实际上意味着您告诉数据库返回它可以读取的数据,无论数据是否已提交到数据库


因此,总之:
NOLOCK
是重要的,如果您想要准确的数据。如果您只需要数据,那么可以使用
NOLOCK
,但这通常不是一个好主意。

WITH(NOLOCK)提示是指向特定表或视图的显式命令,用于针对查询视图中的表设置事务隔离级别。一旦发出锁,就不会对表中的数据使用锁。这样做的好处是,对于针对该表运行的任何其他查询,都不会出现死锁。另一个间接优势是,将使用更少的内存来对该数据进行锁定

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


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

你的回答似乎与你的意思相反
NOLOCK
无法确保数据的一致性。获取一致的数据是默认行为。@hvd您是对的,现在时间还早,我还没有喝咖啡。我会纠正的,谢谢你的努力。答案是它超越了获取一致数据的规则。这意味着NOLOCK会给我们提供不一致的数据。因此,答案是完美的