当前位置:Gxlcms > 数据库问题 > SQL Server 利用锁提示优化Row_number()-程序员需知

SQL Server 利用锁提示优化Row_number()-程序员需知

时间:2021-07-01 10:21:17 帮助过:3人阅读

statistics time on select * from ( select ProductID, rn = ROW_NUMBER() OVER (ORDER BY ProductID) from [bigTransactionHistory] ) as t where t.rn between 15631801 and 15631802

这条查询在我的电脑上执行了15S,这还是数据全在内存中的情形!如图1-1

技术分享

                                                                图1-1

一个简单的执行计划执行如此之长有点匪夷所思,毕竟逻辑读才6W多,且无物理读

,而且CPU时间与占用时间相差无几,排除了阻塞之类的因素后我们把消耗定位在这个查询本身上.这时提一个Row_number()的特点,它可在万千数据中将其序列化让我们找到我们想要的精确数据点,但就此默认的实现方式上是为每一行数据都加一个行锁.

我们开启Trace Flag 1200再次执行语句捕捉下执行时的锁.可以看到Row_number()在实现上未进行锁升级如图1-2

Code

技术分享
dbcc traceon(3604,1200,-1)

select * from 
(
select ProductID, rn = ROW_NUMBER() OVER (ORDER BY ProductID)
from [bigTransactionHistory]
) as t
where t.rn between 15631801 and 15631802
View Code

技术分享

人气教程排行