两个排序字段的测试
set nocount on;
declare @t datetime;
set @t = getdate();
with t_rn as (
select *,rn = ROW_NUMBER() OVER (ORDER BY name ,id asc) FROM test_indexorder
)
SELECT id,name,content,co1,co2,co3,co4,co5 from t_rn WHERE rn between 19007 and 19057;
print '查询时间(毫秒)'
print datediff(millisecond,@t,getdate())
1、没加 name 相关的索引
查询时间(毫秒)
38953
2、添加非聚集索引 name,id
第一次查询
查询时间(毫秒)
733
在此查询
查询时间(毫秒)
216
在在此查询
查询时间(毫秒)
156
3、颠倒法分页。
set nocount on;
declare @t datetime;
set @t = getdate();
select * from test_indexorder where id in
( select top 50 id from
(select top 19056 id , [name] from test_indexorder
order by [name] asc, id asc
) as aa
order by [name] desc, id desc
)
order by [name] , id
print '颠倒法(毫秒)'
print datediff(millisecond,@t,getdate())
set nocount off;
第一次查询
颠倒法(毫秒)
1093
在此查询
颠倒法(毫秒)
1093
看来还是 ROW_NUMBER() 的方式快,不过也不怕,改一下分页控件内部的分页算法就可以了,调用分页控件的部分不用作修改。
整个项目也可以平稳升级到 2005 系列。至少是分页相关的部分。
感谢lz,我正想找一个 ROW_NUMBER() 的分页方式作一下对比测试呢。
另外 between 19007 and 19057 是51条记录。:)
回复 引用 查看