小编典典

在SQL Server中的每个SELECT上使用(nolock)会导致什么结果?

sql

我知道(nolock)优化程序提示允许“脏读”,但是在什么非常特殊的情况下,这是一个坏主意?我从未(nolock)在组织中如此广泛地使用过,这让我感到紧张。我想对用户故事进行解释。“保罗做A,彼得做B,X代替Y”。


阅读 211

收藏
2021-03-17

共1个答案

小编典典

重新发布 答案:


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行已更新(length 2),所有其他行未更新(length 1)。

SELECT  SUM(LEN(name))
FROM    master WITH (NOLOCK)
OPTION (MAXDOP 1)

---
18884367

并且此查询在上一个查询完成后立即运行,可以查看所有更新。

2021-03-17