三种SQL分页方法性能分析

--下面是三种分页方法性能测试。
--与网上所说的测试结果不一致
--(网上有人认为颠倒顺序top法 性能要比Row_number函数编号分页法要快10倍。。。)
--测试的表只有3000多行数据这可能是个问题

set statistics profile on
set statistics io on
set statistics time on
go

--第一名
--Row_number函数编号分页法(SQLServer新提供的函数)
--按SQLServer每一步的执行过程来看:
--用Row_number分页的执行过程步骤要比用top分页的执行步骤要多
--但用Row_number分页第三步(前两步是一样的是结果集的查询)
----也就是分页开始后的开销基本上等于0。
----可能是row_Number函数在查询的结果集上建了一个索引。
--而用top如果排序不是按索引来排的话每次排序都会花费不少时间
select * from (
select
--top 3020 --加不加top执行过程是一样的。。。
ROW_NUMBER()over(order by ProductCode DESC ) as rowNum,*
from Clothes where Sex='男')
results
--where rowNum between 3001 and 3020
--改成下面的写法要快一些。上面的写法在实际执行的时候是与下面写法执行是一样的。
where rowNum >= 3001 and rowNum <= 3020


--第二名
--用颠倒顺序top法
select * from (
select top 20 * from (
select top 3020 *
from Clothes where Sex='男'
order by ProductCode DESC
) pageResult order by ProductCode ASC )
pageSort order by ProductCode DESC



--第三名
--用top加outer join 法执行12步
select toPage.* from
(
select top 3020 *
from Clothes where Sex='男'
order by ProductCode DESC
)
toPage
left outer join
(
select top 3000 * from Clothes where Sex='男'
order by ProductCode DESC
) before
on toPage.clothescode=before.clothescode
where before.clothescode is null


go
set statistics profile off
set statistics io off
set statistics time off

转载于:https://www.cnblogs.com/heys/archive/2009/03/20/1417561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值