当我使用
时,我以不同的顺序获取行SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
在我的存储过程中。
以下是存储过程中定义的查询。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT CaseRateDetailId,AmtPerWeek
FROM CaseRateDetails
WHERE CaseRateInfoId = @CaseRateInfoId
它会像这样返回AmtPerWeek:
10000,15000,5000,20000,25000,..
当我在不使用
的情况下运行相同的查询时SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
语句以正确的顺序返回行,即5000,10000,15000,20000,25000,....
我可以在上面的查询中使用AmtPerWeek子句的顺序,但我想知道它的行为是这样的?为什么要改变行的顺序?
答案 0 :(得分:10)
在NOLOCK
或TABLOCK
下,您可以获得一个allocation ordered scan,它按文件顺序读取页面,而不是遵循索引的叶级别。
它是否在执行计划中显示它是否使用此方法。如果没有ORDER BY
,则无法保证订单。