第一种方案:
两次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 排序列必须是唯一列,否则分页情况不符实际