分页控件使用方法

  以NorthWind 数据库里的 Products 表为例,假设一页显示10条数据,CategoryID = 3 为查询条件,按照UnitPrice 倒序,由于UnitPrice 字段可能有重复值,所以加上一个排序字段——ProductID ,即按照 UnitPrice  desc,ProductID  来排序。 如果想显示第二页的数据,那么SQL语句就是 select * from Products where ProductID in     ( select top 10 ProductID from         (select top 20 ProductID , UnitPrice from                Products             where CategoryID = 3             order by                 UnitPrice desc ,                 ProductID              ) as aa            order by                UnitPrice asc,        --如果上面是倒序,那么这里就是正序,下同                 ProductID desc     ) order by     UnitPrice desc,    --如果上面是倒序,那么这里就是正序,所谓颠颠倒倒嘛。     ProductID     说明:     1、这里查询条件加一次就可以了。     2、是不是看 asc ¦desc 倒来倒去的有点晕,恩,这就对了,颠颠倒倒嘛。     3、最主要的就是第三个select 语句,他要取从第一条数据到要显示的页的数据,可见越是后面的记录,top n 就会越大,所以这里提取的数据就要做一个精简,只写排序需要的字段(主键字段和排序字段)。     4、第二个select 语句是去掉前面不需要的页里的数据,只保留要显示的页号里的数据。     5、第一个select 语句,用主键字段 in () 的方式提取其他需要的字段。     6、这种分页算法有一个小的bug,就是显示最后一页数据的时候,会多出来几条记录,不过这个bug已经在分页控件里面修正了,最后一页的分页算法,采用特殊的select语句。     7、效率,设置好索引,效率是没有问题的,上一篇随笔已经测试过了。     8、这种算法有一个“侵入性”,就是要求表必须有主键,而且不能是联合主键,引为要用 in 的方式查询数据。但是并没有要求主键自身必须能够排序。 测试效果 记录数:2523136条。 一页显示5条记录。 //分页算法1 单字段排序,且排序字段是聚集索引。   //1000 页以内 15毫秒   //10000页以内 30毫秒   //50000页以内 100多毫秒   //100000页以内 200多毫秒   //最后几页 第一次跳转到 4秒多   //最后几页 连续向前翻页 1秒156毫秒   //页号大范围跳转的时候需要的时间比较长,但是也小于1秒,同时SQL Server 占用的内存有所增加 120M。最后几页时达到320M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值