sql server 分页总结
1、第一种方式:使用 ROW_NUMBER() OVER(ORDER BY ID) …… BETWEEN AND 的方式
SELECT * FROM(
SELECT
ROW_NUMBER() OVER(ORDER BY ID) AS NUMBER,
*
FROM FillReport
)T
WHERE NUMBER BETWEEN 100 AND 200
2、使用 OFFSET ROWS FETCH NEXT ROWS ONLY 的方式
SELECT *
FROM FillReport
ORDER BY ID OFFSET 4 ROWS FETCH NEXT 5 ROWS ONLY
3、使用 NOT IN 的方式
SELECT TOP 3
*
FROM FillReport
WHERE ID NOT IN (SELECT TOP 15 ID FROM FillReport) 4、使用存储过程的方式
CREATE PROC PAGE_DEMO
@TABLENAME VARCHAR(20),
@PAGESIZE INT,
@PAGE INT
AS
DECLARE
@NAMEPAGE INT,
@RES VARCHAR(100)
BEGIN
SET @NAMEPAGE=@PAGESIZE*(@PAGE-1)
SET @RES='SELECT * FROM ' + @TABLENAME + ' ORDER BY ID OFFSET ' + CAST(@NAMEPAGE AS varchar(10)) + 'ROWS FETCH NEXT ' + CAST(@PAGESIZE AS varchar(10)) + 'ROWS ONLY'
EXEC(@RES)
END
EXEC PAGE_DEMO @TABLENAME = 'FillReport', @PAGESIZE = 3, @PAGE = 5
Top的分页是基本上所有的版本的sql server都可以使用的,row_number()是sql 2005以上,offset fetch需要sql 2012才支持了。
测试性能:
20W数据量
1.Top
第1页十次执行平均时间29.1毫秒。

第1万页十次执行平均时间109.2毫秒。

第2万页十次执行平均时间126.8毫秒。

2.Row_Number()
第1页十次执行平均时间20.2毫秒。

第1万页十次执行平均时间96.5毫秒。

第2万页十次执行平均时间153.8毫秒。

3.Offset Fecth
第1页十次执行平均时间19.3毫秒。

第1万页十次执行平均时间70毫秒。

第2万页十次执行平均时间75.1毫秒。

200W数据量
1.Top
第1页十次执行平均时间55.9毫秒。

第10万页十次执行平均时间.....毫秒。
执行了好几十秒。。。。直接淘汰
2.Row_Number()
第1页十次执行平均时间25.5毫秒

第10万页十次执行平均时间642.3毫秒

第20万页十次执行平均时间1257毫秒

3.Offset Fecth
第1页十次执行平均时间24.7毫秒

第10万页十次执行平均时间220.5毫秒

第20万页十次执行平均时间396毫秒

2000W数据量
1.Top
因为在上一轮被淘汰了,所以这一轮就算了。。
2.Row_Number()
第1页十次执行平均时间57毫秒

第100W页十次执行平均时间6401.5毫秒

第200W页十次执行平均时间14606.2毫秒

3.Offset Fecth
第1页十次执行平均时间27.5毫秒

第100W页十次执行平均时间1778.9毫秒

第200W页十次执行平均时间3523.2毫秒

总结
可以看出来数据量越大、分页页码越大对分页效率影响就越大。top的分页方法早早出局,很明显是因为not in 的数据量太庞大了,所以要是有好的top分页方法可以下面留言,我也会进行测试。row_number的分页方法算是比较好的了,而且sql2005及以上的数据库都可以用,受众范围比较大,而offset fecth的性能更加优越,但是只有sql2012及以上的才支持。
测试这一块的数据是参考的这篇文章:https://www.cnblogs.com/xwc1996/p/9113049.html
sql server 分页总结的更多相关文章
- SQL SERVER 分页方法
最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...
- SQL Server分页模板
SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...
- 解决hibernate对Sql Server分页慢的问题
一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- SQL server分页的四种方法
SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路 先取前20页, ...
- 二、SQL Server 分页
一.SQL Server 分页 --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id f ...
- SQL server分页的四种方法(算很全面了)
这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...
- SQL Server 分页方法汇总
PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...
- SQL Server 分页语句
表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...
随机推荐
- 再谈EFAGE寄存器中的C位,P位,O位
由于写EFLAGE博文中,有关C位,P位,O位,我觉得我没有描述清楚,而且C位也没有演示过借位情况,P位中也有些坑没讲,我还是决定再补一篇,争取把每个标志位描述清楚,不光是让看我文章的人能看的明白,也 ...
- [TCP/IP] TCP的重发机制是怎么实现的
1)滑动窗口机制,确立收发的边界,能让发送方知道已经发送了多少(已确认).尚未确认的字节数.尚待发送的字节数:让接收方知道(已经确认收到的字节数) 2) 超时重传,tcp每发送一个报文段,就设置一次计 ...
- Java数据库连接组件C3P0和DBCP
C3P0连接池组件 开源数据库连接池组件 jar包:c3p0-0.9.2.jar和mchange-commons-java-0.2.2.3.jar 支持JDBC3规范和JDBC2的标准扩展 使用项目H ...
- Shell脚本(2)
命令替换: Shell脚本可以从命令输出中提取信息,并将其赋给变量 方法: 1.反引号字符:` 2.格式:$() 例子:#/bin/bash test=$(date) echo "the d ...
- centos7 安装gitlab及简单配置
1.安装 wget -O gitlab.rpm https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-11.11.3 ...
- kubernetes CRI 前世今生
在学习kubernetes的过程中,我们会遇到CRI.CNI.CSI.OCI 等术语,本文试图先通过分析k8s目前默认的一种容器运行时架构,来帮助我们更好理解k8s 运行时背后设计逻辑.进而引出CRI ...
- Python 大佬 的经典设计格言 ---- 铭记于心
美丽优于丑陋.清楚优于含糊.简单优于复杂.复杂优于繁琐.平坦优于曲折.宽松优于密集.重要的是可读性.特殊的案例不足以特殊到破坏规则.尽管实践可以打破真理.错误却不可置之不理.除非另有明确要求.面对模棱 ...
- HTTPS各版本安全策略HTTPS1_1_TLS1_0、HTTPS2_TLS1_0、HTTPS2_TLS1_2
来自阿里云 https://help.aliyun.com/document_detail/115169.html HTTPS安全策略 更新时间:2019-04-26 14:49:12 分组 ...
- JDOJ 1044 Span
JDOJ 1044 Span https://neooj.com/oldoj/problem.php?id=1044 Description 某国有N个村子,M条道路,为了实现“村村通工程”现在要”油 ...
- 继上篇博客对安卓爬虫以及TextView更新的问题解释
只能在主线程更新ui,或者用handler传输.爬虫是在另一个异步线程进行,所以爬出来的数据对控件赋值就比较麻烦.这次使用了线程数据传到runnable将数据传到handler进行赋值. 结果图: 源 ...