SqlServer 多种分页方式 详解(含简单速度测试)

作者:沐光之成 时间:2024-01-15 07:28:04 

SQLServer分页方式

附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序]
环境 WIN7 SQL服务12.04 SQL管理器SSMS14.01

1.Offset and Fetch 方式分页

[SqlServer2012+] OFFSET 起始值 ROWS FETCH NEXT 每页条数 ROWS ONLY

1.分页条件不能重复,建议使用 分页条件+主键 一起作为 分页参数
2.分页语句中 FIRST=NEXT ROWS=ROW
3.不使用排序可以用 order by (select 1)

使用 OFFSET FETCH 方式分页必须带order by key 其中key 必须是唯一值 不然会导致错误

select * from (
select * from sysrizhi
) table_temp order by riqi desc,sysrizhiid desc offset 10 rows fetch next 10 rows only

50万行执行时间 770毫秒 索引排序10毫秒

select * from tcpliushui order by riqi OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY

2.row_number() 方式分页

[SqlServer2005+] row_number()over(order by 已有排序字段)rownumber 然后根据rownumber筛选

使用方式

select * from (select *, ROW_NUMBER() Over( order by  riqi desc,sysrizhiid desc ) as rowNum from (
select * from sysrizhi
 ) as table_1  ) as t where t.rowNum>10 and t.rowNum<=20

速度测试 50万行执行时间 774毫秒 索引排序10毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui )a
where rownumber>100 and rownumber<121

速度测试 50万行执行时间 777毫秒 索引排序13毫秒

select top 20 * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber>100

速度测试 50万行执行时间 775毫秒 索引排序15毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber between 101 and 120

3.row_number()变种

不基于已有字段 [SqlServer2005+]

速度测试 50万行执行时间 779毫秒 索引排序15毫秒

select *
from (
select row_number()over(order by tempColumn)rownumber,*
from (select top 120 tempColumn=0,* from tcpliushui where 1=1 order by riqi)a
)b
where rownumber>100

4.not in/top方式分页

速度测试 50万行执行时间 858毫秒 索引排序51毫秒

select top 20 * from tcpliushui
where tcpliushuiid not in (select top 100 tcpliushuiid from tcpliushui order by riqi)
order by riqi

5.not exists方式分页

速度测试 50万行执行时间 852毫秒 索引排序22毫秒

select top 20 * from tcpliushui
where not exists
(select 1 from (select top 100 tcpliushuiid from tcpliushui order by riqi)a where a.tcpliushuiid=tcpliushui.tcpliushuiid)
order by riqi

6.max/top方式分页

速度测试 50万行执行时间 819毫秒 索引排序12毫秒

select top 20 * from tcpliushui
where tcpliushuiid>(select max(tcpliushuiid) from (select top 100 tcpliushuiid from tcpliushui order by riqi)a)
order by riqi

来源:https://blog.csdn.net/u011363395/article/details/104414500

标签:SqlServer,分页
0
投稿

猜你喜欢

  • python基于event实现线程间通信控制

    2022-04-30 07:10:51
  • Python2.x中文乱码问题解决方法

    2023-09-20 14:35:35
  • Python使用遗传算法解决最大流问题

    2023-02-19 10:49:57
  • python中urllib模块用法实例详解

    2022-02-05 13:23:33
  • Python使用定时调度任务的方式

    2021-03-10 01:40:24
  • Python3.4学习笔记之常用操作符,条件分支和循环用法示例

    2021-08-24 03:06:43
  • 解决使用OpenCV中的imread()内存报错问题

    2022-06-06 03:14:21
  • asp DateDiff实现文字在特定时间后消失

    2011-03-11 11:11:00
  • 兼容主流浏览器,纯CSS下拉菜单

    2010-09-05 20:30:00
  • C++调用python(执行py文件)的全过程

    2022-04-24 00:30:53
  • 关于微信小程序获取小程序码并接受buffer流保存为图片的方法

    2023-07-20 09:54:01
  • 用Dreamweaver MX制作文字特效

    2011-06-14 09:49:47
  • 在PyCharm中安装PaddlePaddle的方法

    2022-02-24 17:28:18
  • Python随机生成数据后插入到PostgreSQL

    2023-05-14 19:58:09
  • python 实现有道翻译功能

    2022-03-25 17:30:55
  • Python程序实现向MySQL存放图片

    2022-12-02 13:34:38
  • 用python对excel查重

    2022-03-09 05:21:47
  • 使用Webpack构建多页面程序的实现步骤

    2024-04-23 09:06:27
  • python画环形图的方法

    2023-02-12 09:54:24
  • 从多个tfrecord文件中无限读取文件的例子

    2023-10-23 13:29:19
  • asp之家 网络编程 m.aspxhome.com