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