4

我有一个关于使用的问题NOLOCK

我知道NOLOCK提示并不总是最好的方法,但在某些情况下它非常有用。我并不是要养成一直使用它的坏习惯

我只是想了解它的确切行为。有一个不切实际的假设,即更新 id = 10 的记录的进程UPDATE table1 SET status = 2 WHERE id = 10需要 30 秒才能更新。同时我执行SELECT * FROM table1 WITH NOLOCK where id = 10

即使我的第一个查询在记录上具有排他锁,我的 select 语句是否会读取该行,或者我的 select 查询会等到记录上没有任何锁,然后才允许读取?

我想知道使用NOLOCK是否会导致延迟。

4

1 回答 1

3

对上述问题的简短回答是:“不”。

在大多数情况下,NOLOCK 提示将加速相关查询,以及同时针对指定表操作的任何其他查询。原因是没有检查或获取锁。你已经在你的问题中列出了可能的副作用,所以我不会在这里讨论这些。

在一天结束时,查询会更快,但结果会令人怀疑。

于 2016-03-04T21:05:22.483 回答