我有一个存储过程,当NOLOCK提示添加到查询时,它会执行更多的读取操作。我很困惑 - 有谁知道为什么,拜托?
详细说明: 查询是:
SELECT * FROM dbo.<table-name> WITH (NOLOCK).
它正在进行40,000次读取,并且行数少于2,000行。我确定大多数这些读取都是由3个TEXT列引起的。 (如果我省略那些它会降低到59次读取!)但是当我删除WITH(NOLOCK)时,它从40,000次读取到13,000次。我重复了几次,因为我认为我必须搞砸了,但两种方式都是一致的。
答案 0 :(得分: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)
答案 1 :(得分:0)
也许读取计数包括读取锁定的页面读取?