SqlServer 多种分页方式 详解(含简单速度测试)
作者:沐光之成 发布时间:2024-01-15 07:28:04
标签:SqlServer,分页
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


猜你喜欢
- 这个功能现在很多网站,论坛都有,本站也有呵呵!如果您还不知道如何实现这个功能,没关系看看本文吧!我将给你介绍怎么给你的网站加上运行代码框的功
- 先看示例i=1menu=["B超室","化验室"]user="张来,黎明,常冒
- 本文转自微信公众号:"算法与编程之美",一、问题描述在collections模块中的defauldict使用时与dict
- DatePart 的语法是 DatePart(interval, date),用以取 date 的某部分。 interval yyyy:da
- 思路:先选择在线签名网站,找到接口模拟请求,然后将生成的签名图片显示在 Tkinter 生成的 GUI 窗口上,最后保存生成的签名图片选择网
- 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独生成由递归算法实现,由shuffle
- 索引和切片是NumPy中最重要最常用的操作。熟练使用NumPy切片操作是数据处理和机器学习的前提,所以一定要掌握好。文档:https://d
- 缘起simple-todo最早是web.py一个中文教程的例子。后来Uliweb的作者limodou 认为这个教程很不错,于是有了Uliwe
- 前些天写一个存储过程,存储过程中使用了事务,后来我把一些代码注释掉来进行调试找错,突然发现一张表被锁住了,原来是创建事务的代码忘记注释掉。本
- 本文实例讲述了Go语言获取数组长度的方法。分享给大家供大家参考。具体实现方法如下:// getting the length of an a
- Java的idea在更新2020.1时就更新了官方汉化,当时Pycharm还没用出现汉化,但这两天提示我更新2020.1.1的时候,我发现p
- 假设我们有以下虚拟函数:import sysdef writeline(text, stream=sys.stdout): stream.w
- Stochastic Depth论文:Deep Networks with Stochastic Depth本文的正则化针对于ResNet中
- Reflect对象是一个全局的普通的对象。Reflect的原型就是Object.我们首先来验证下 看看Reflect的原型是否是Object
- 题目:轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的,如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0
- 本文介绍了react-native ListView下拉刷新上拉加载实现。分享给大家,具体如下:先看效果图下拉刷新React Native提
- 1. 项目背景视频传输: 在一台电脑上播放视频(捕捉摄像头画面),同局域网内另一台电脑上实时播放,尽量不卡顿。先放最后的照片,和用gif展示
- 本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下:这里演示读写数据库并在窗体(Form)中显示其数
- 叨逼叨首先,介绍一下 pdb 调试,pdb 是 python 的一个内置模块,用于命令行来调试 Python 代码。或许你会说,现在用 Py
- 首先,我想说一下Javascript的装载和执行。通常来说,浏览器对于Javascript的运行有两大特性:1)载入后马上执行,2)执行时会