我知道 (nolock)
优化器提示允许“脏读”,但在哪些非常具体的情况下这是一个坏主意?我从未见过如此广泛使用 (nolock)
在一个组织中,这让我很紧张。我想要一个关于用户故事的解释。 “保罗做 A,彼得做 B,X 发生而不是 Y”。
最佳答案
转发 this回答:NOLOCK
意味着根本不放置锁。
您的查询可能会返回之前的部分数据 UPDATE
和之后的部分 UPDATE
在单个查询中。
比如,没有信用的借记卡之类的东西。
例如,我只是在一个大表上运行了这个查询:
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874367
全部
name
的长度为 1
.然后我重新运行它并在查询的中间更新了表:
UPDATE master
SET name = 'tt'
WHERE id <= 10000
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874944
如我们所见,此查询注意到
577
行已更新(长度 2
),所有其他行未更新(长度 1
)。SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18884367
而这个查询,在上一个完成后立即运行,查看所有更新。
关于sql - 在 SQL Server 中的每个 SELECT 上使用 (nolock) 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1682240/