Chr*_*all 13 sql sql-server optimizer-hints
我得到(nolock)优化器提示允许"脏读",但在非常具体的情况下,这是一个坏主意?我从未(nolock)在组织中看到如此广泛的使用,这让我感到紧张.我想用用户故事来解释一下."保罗做A,彼得做B,X代替Y".
Qua*_*noi 15
重新回答这个答案:
NOLOCK 意味着根本没有锁.
您的查询可能会在单个查询中返回之前的部分数据UPDATE和之后的部分数据.UPDATE
比如,借记没有信用和这些东西.
例如,我只是在一个大表上运行此查询:
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874367
Run Code Online (Sandbox Code Playgroud)
所有name的都有1.
然后我重新启动它并在查询中间更新了表:
UPDATE master
SET name = 'tt'
WHERE id <= 10000
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18874944
Run Code Online (Sandbox Code Playgroud)
我们可以看到,这个查询注意到577行更新(长度2),所有其他行都没有更新(长度1).
SELECT SUM(LEN(name))
FROM master WITH (NOLOCK)
OPTION (MAXDOP 1)
---
18884367
Run Code Online (Sandbox Code Playgroud)
此查询在上一个完成后运行,查看所有更新.