SQL Server 通用分页方案

 

第一种方案:
两次TOP分页,原型如下:  

SELECT   *   FROM   (
SELECT   TOP  每页大小   *   FROM   (

SELECT   TOP   每页大小*当前页码   *   FROM  

表   WHERE   条件   ORDER   BY   字段A   ASC

)   AS   TEMPTABLE1   ORDER   BY   字段A   DESC

)   AS   TEMPTABLE2   ORDER   BY   字段A   ASC

弊病:1   强制排序   否则不能分页,虽然目前基本上查询表都要排序

2.   排序字段不能有空值即null,否则分页结果不符实际情况

3.   多次order   by   速度会快吗,有待我进一步大数据量测试

 

 

第二种方案:基于NOT IN   ,原型如下

SELECT TOP   每页大小   *
FROM   表
WHERE   (
Id   NOT   IN
(SELECT TOP  每 页大小*页数   Id   FROM   表   ORDER BY Id)
)
ORDER BY Id

弊病:1   强制排序
2   排序列必须是唯一列,否则分页情况不符实际
3.   使用not   in,速度慢,

 

第三种方案:   基于MAX   或者   MIN ,原型如下:

SELECT TOP   每页大小   *
FROM   表
WHERE   (
Id   >   (  
SELECT    ISNULL(MAX(Id),0)  FROM   (   SELECT TOP   每页大小*页数   Id   FROM   表
ORDER BY Id   )   as   t
)
)  
ORDER BY Id

弊病:1   强制排序
2   排序列必须是唯一列,否则分页情况不符实际

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值