2

我有一个存储过程,当 NOLOCK 提示添加到查询时,它会执行更多读取操作。我很困惑 - 请问有人知道为什么吗?

详细信息:查询是:

SELECT * FROM dbo.<table-name> WITH (NOLOCK).

它进行了 40,000 次读取,但行数不到 2,000 行。我确定大多数这些读取是由 3 个 TEXT 列引起的。(如果我省略了这些,它会下降到 59 次读取!)但是当我删除 WITH (NOLOCK) 时,它会从 40,000 次读取到 13,000 次。我重复了几次,因为我认为我一定搞砸了,但这两种方式都非常一致。

4

2 回答 2

1

NOLOCK 从尚未提交的事务中读取数据。

编辑

NOLOCK 读取未提交数据的演示。

create table table1 (id int, val int)
go

select * from table1 with ( NoLock)
begin tran
insert into table1 values (1,1)

--Switch to new query window
select * from table1 with ( NoLock)
--switch back
rollback tran
select * from table1 with ( NoLock)
于 2009-01-14T16:21:49.777 回答
0

也许读取计数包括读取锁的页面读取?

于 2009-01-14T16:07:28.057 回答