我知道(nolock)优化程序提示允许“脏读”,但是在什么非常特殊的情况下,这是一个坏主意?我从未(nolock)在组织中如此广泛地使用过,这让我感到紧张。我想对用户故事进行解释。“保罗做A,彼得做B,X代替Y”。
(nolock)
重新发布 此 答案:
NOLOCK 表示根本不放置任何锁。
NOLOCK
您的查询可能会 在单个查询中 返回之前的部分数据UPDATE和之后的部分数据。UPDATE __
UPDATE
就像,没有信用的借记卡之类的东西。
例如,我只是在一个大表上运行了此查询:
SELECT SUM(LEN(name)) FROM master WITH (NOLOCK) OPTION (MAXDOP 1) --- 18874367
所有name的长度为1。
name
1
然后我重新运行它,并在查询中间更新了表:
UPDATE master SET name = 'tt' WHERE id <= 10000 SELECT SUM(LEN(name)) FROM master WITH (NOLOCK) OPTION (MAXDOP 1) --- 18874944
如我们所见,该查询注意到577行已更新(length 2),所有其他行未更新(length 1)。
577
2
SELECT SUM(LEN(name)) FROM master WITH (NOLOCK) OPTION (MAXDOP 1) --- 18884367
并且此查询在上一个查询完成后立即运行,可以查看所有更新。