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 分页总结的更多相关文章

  1. SQL SERVER 分页方法

    最近项目中需要在SQL SERVER中进行分页,需要编写分页查询语句.之前也写过一些关于分页查询的语句,但是性能不敢恭维.于是在业务时间,在微软社区Bing了一篇老外写的关于SQL SERVER分页的 ...

  2. SQL Server分页模板

    SQL Server分页模板 WITH T AS ( SELECT ROW_NUMBER() OVER(ORDER BY AlbumId ) AS row_number, * FROM (SELECT ...

  3. SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条

    SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条 SELECT Id,[Title],[Content],[Image] FROM ( SELECT ROW_NUMBER( ...

  4. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  5. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  6. SQL server分页的四种方法

    SQL server分页的四种方法 1.三重循环: 2.利用max(主键); 3.利用row_number关键字: 4.offset/fetch next关键字 方法一:三重循环思路  先取前20页, ...

  7. 二、SQL Server 分页

    一.SQL Server 分页 --top not in方式 select top 条数 * from tablename where Id not in (select top 条数*页数 Id f ...

  8. SQL server分页的四种方法(算很全面了)

      这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本.下面都用pageIndex表示页数,pageSize表示一页包含的记录.并且下面涉及到具体例子的,设定查询第2 ...

  9. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  10. SQL Server 分页语句

      表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable ...

随机推荐

  1. Spring Cloud Netflix之Eureka服务消费者

    Eureka服务消费者介绍 Eureka服务消费者用于发现服务和消费服务,发现服务通过Eureka Client完成,消费服务通过Ribbon完成,以实现负载均衡.在实际项目中,一个服务往往同时是服务 ...

  2. 给普通用户赋予sudo权限后报错,提示/etc/sudoers文件权限拒绝

    在Ubuntu 16.04系统里给普通用户赋予sudo权限,编辑vi /etc/sudoers 文件内容后发现执行sudo命令报错. 当我运行命令检查sudo权限的时候 sudo -i 输出错误提示: ...

  3. windows10下Bad owner or permissions on .ssh/config的解决办法

    方法很简单,亲测有效. 1.进入如下路径C:\Users\用户名\.ssh,你会看到有config这个文件 2.右击config,属性→安全→高级→禁止继承→删除所有继承(忘了全称了,大概这个意思)→ ...

  4. Java并发--Java中的CAS操作和实现原理

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/CringKong/article/deta ...

  5. Qt工程管理

    Qt Creator工程管理Qt Creator以工程项目的方式对源码进行管理一个Qt Creator工程包含不同类型的文件 .pro项目描述文件.pro.user用户配置描述文件 //由Qt Cre ...

  6. Appium基础:Desired Capabilities详讲

    Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...

  7. 201871010110-李华《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. Mac环境下 jieba 配置记录

    在终端里输入: pip3 install jieba -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  9. CF306C White, Black and White Again

    CF306C White, Black and White Again 洛谷评测传送门 题目描述 Polycarpus is sure that his life fits the descripti ...

  10. react服务端渲染框架

    客户端渲染 加载一个空的html页面,然后请求一个打包的js文件,然后再客户端执行这个js文件 动态生成html内容然后插入到DOM元素上,在源代码查询中也只能看到空的html文档 没有任何其他内容 ...