NOLOCK 提示是否会减慢操作速度?
Does NOLOCK hint slow down operation?
我对 NOLOCK
的使用有疑问。
我知道 NOLOCK
提示并不总是最好的方法,但在某些情况下它非常有用。我不是想养成一直使用它的坏习惯
我只想了解它的确切行为。有一个不切实际的假设,即更新记录的进程 where id = 10 UPDATE table1 SET status = 2 WHERE id = 10
需要 30 秒才能更新。同时我执行 SELECT * FROM table1 WITH NOLOCK where id = 10
我的 select 语句会读取该行,即使我的第一个查询在记录上有独占锁,还是我的 select 查询会等到记录上没有任何锁才允许阅读?
我想知道使用 NOLOCK
是否会导致延迟。
问题的简短回答是:"No."
在大多数情况下,NOLOCK 提示将加速相关查询,以及同时针对指定 table 运行的任何其他查询。原因是没有检查或获取锁。您已经在您的问题中列出了可能的副作用,所以我不会在这里介绍这些。
最终查询速度会更快,但结果会令人怀疑。
我对 NOLOCK
的使用有疑问。
我知道 NOLOCK
提示并不总是最好的方法,但在某些情况下它非常有用。我不是想养成一直使用它的坏习惯
我只想了解它的确切行为。有一个不切实际的假设,即更新记录的进程 where id = 10 UPDATE table1 SET status = 2 WHERE id = 10
需要 30 秒才能更新。同时我执行 SELECT * FROM table1 WITH NOLOCK where id = 10
我的 select 语句会读取该行,即使我的第一个查询在记录上有独占锁,还是我的 select 查询会等到记录上没有任何锁才允许阅读?
我想知道使用 NOLOCK
是否会导致延迟。
问题的简短回答是:"No."
在大多数情况下,NOLOCK 提示将加速相关查询,以及同时针对指定 table 运行的任何其他查询。原因是没有检查或获取锁。您已经在您的问题中列出了可能的副作用,所以我不会在这里介绍这些。
最终查询速度会更快,但结果会令人怀疑。