SQL 2005:NOLOCK提示显着增加了读取。 WTF?

时间:2009-01-14 16:05:50

标签: sql-server-2005 locking query-hints

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

详细说明: 查询是:

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

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

2 个答案:

答案 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)

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