http://www.dotblogs.com.tw/mis2000lab/archive/2015/04/10/sql_querying_paging_offset-fetch.aspx

这篇文章源自微软出版社(Microsoft Press

2015年的新书 -- T-SQL Querying

  • Published 3/6/2015
  • 1st Edition
  • 864 pages
  • Book 978-0-7356-8504-8
  • eBook 978-0-13-398664-8

微软网站已经公开了 这一章 的全文,请看

https://www.microsoftpressstore.com/articles/article.aspx?p=2314819&seqNum=1

第二页里面 介绍数据库分页的SQL指令,

包含 TOPROW_NUMBER(SQL 2005 起可用)OFFSET-FETCH(SQL 2012 起可用)

因为我们公司都改成SQL 2012版了,所以我只摘录 OFFSET-FETCH的部分

====================================================================

SQL 2012 多了OFFSET-FETCH的作法,

比起上述的TOP、ROW_NUMBER更简单而且更强。

底下是一般的作法(尚未优化),跟前面章节的范例雷同:

-- 批注:改良后的预存程序(尚未优化)。

CREATE PROC dbo.GetPage5

@pagenum  AS BIGINT = 1,

@pagesize  AS BIGINT = 25

AS

SELECT orderid, orderdate, custid, empid

FROM dbo.Orders

ORDER BY orderid

OFFSET (@pagenum - 1) * @pagesize ROWS FETCH NEXT @pagesize ROWS ONLY;

GO

-- 批注:执行这一段预存程序。

EXEC dbo.GetPage5 @pagenum = 1, @pagesize = 25;

EXEC dbo.GetPage5 @pagenum = 2, @pagesize = 25;

EXEC dbo.GetPage5 @pagenum = 3, @pagesize = 25;

下图是简单的解说,让您了解 OFFSET-FECTCH的用法

我们可以进一步修正如下,让搜寻的效能更好。

根据微软出版书籍所做的测试,在您阅览第一千页的数据时,下面的写法只需逻辑读取241次,

而上述的写法却要76,644次,效能大幅提升了。

-- 批注:改良后的预存程序(优化)。

CREATE PROC dbo.GetPage6

  @pagenum  AS BIGINT = 1,

  @pagesize  AS BIGINT = 25

AS

WITH K AS   -- Define a table expression based on this query (call it K, for keys).

(

  SELECT orderid

  FROM dbo.Orders

  ORDER BY orderid

  OFFSET (@pagenum - 1) * @pagesize ROWS FETCH NEXT @pagesize ROWS ONLY

)

SELECT O.orderid, O.orderdate, O.custid, O.empid

FROM dbo.Orders AS O

  INNER JOIN K

    ON O.orderid = K.orderid

ORDER BY O.orderid;

GO

-- 批注:执行这一段预存程序。

EXEC dbo.GetPage6 @pagenum = 3, @pagesize = 25;

====================================================================

如果您想进一步了解里面的原理

就直接看微软公开的这一章吧,

共有六页,写得很详尽!

https://www.microsoftpressstore.com/articles/article.aspx?p=2314819&seqNum=1

本站已发表的相关文章 --

http://www.dotblogs.com.tw/mis2000lab/archive/2015/04/10/sql_querying_paging_offset-fetch.aspx

[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例的更多相关文章

  1. SQL Server 2012使用Offset/Fetch Next实现分页

    在Sql Server 2012之前,实现分页主要是使用ROW_NUMBER(),在SQL Server2012,可以使用Offset ...Rows  Fetch Next ... Rows onl ...

  2. SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试

    最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页.多数文章都是引用或者翻译的这一篇<SQL Server 2012 - Serv ...

  3. SQL Server使用Offset/Fetch Next实现分页

    T-SQL实现分页 ,查找指定范围内的数据 首先,正常的查询是这样的 使用分页后 select * from Products order by ProductID offset X rows fet ...

  4. sql 2012之后分页查询速度问题

    一.SQL Server 2012使用OFFSET/FETCH NEXT分页,比SQL Server 2005/2008中的RowNumber()有显著改进.今天特地作了简单测试,现将过程分享如下: ...

  5. SQLServer · 最佳实践 · SQL Server 2012 使用OFFSET分页遇到的问题

    1. 背景 最近有一个客户遇到一个奇怪的问题,以前使用ROW_NUMBER来分页结果是正确的,但是替换为SQL SERVER 2012的OFFSET...FETCH NEXT来分页出现了问题,因此,这 ...

  6. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试(转)

    原文地址:http://www.cnblogs.com/downmoon/archive/2012/04/19/2456451.html 在<SQL Server 2012服务端使用OFFSET ...

  7. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]

    SQL Server 2008中SQL应用系列--目录索引 前些天看到一篇文章<SQL Server 2012 - Server side paging demo using OFFSET/FE ...

  8. Sqlserver中分页,2012后支持offset + fetch,2012之前用rownum嵌套查询

    今天发现原先用的sql offset fetch好用,换了一个DB就歇菜 歇菜截图 比较了一下,是数据库版本的问题 一个是13,一个是10 版本低的不支持用offset + fetch 进行分页,ms ...

  9. SQL Server ->> OFFSET & FETCH子句

    SQL Server 2012引入OFFSET + FETCH字句.它俩出现在SELECT .... ORDER BY ...后面.作用是告诉SQL Server在结果集中忽略前N行然后取前M行出来. ...

随机推荐

  1. SQLServer 索引以及视图

    业务 主键: 索引: 锁: ========================================= 一个页分为 页头 页体--存储行 页尾 页是有固定大小的,但是数据不一定存满,有可能产生 ...

  2. centos6.5网络配置问题:ping不通

    遇到的问题:win7网卡ping不通 win7中的VMnet8信息 centos6.5设置: /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ...

  3. The 2013 ACM-ICPC Asia Changsha Regional Contest - K

    Pocket Cube Time Limit: 2 Seconds      Memory Limit: 65536 KB Pocket Cube is a 3-D combination puzzl ...

  4. android 数据存储----文件方式 总结

    在android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理. ...

  5. opencv基于HSV的肤色分割

    //函数功能:在HSV颜色空间对图像进行肤色模型分割 //输入:src-待处理的图像,imgout-输出图像 //返回值:返回一个iplimgae指针,指向处理后的结果 IplImage* SkinS ...

  6. SVN+FTP服务器搭建(一)——SVN安装配置篇

    Subversion是一个自由,开源的版本控制系统.在Subversion管理下,文件和目录可以超越时空.Subversion将文件存放在中心版本库里.这个版本库很像一个普通的文件服务器,不同的是,它 ...

  7. iOS  Emoji表情编码/解码

    之前做弹幕的时候 遇到的表情编码解码问题 表情编码一般是使用unicode编码 ,编码之后的格式 \ud83d\ude18\ud83d\ude18world\u4e16\u754chaha\ud83d ...

  8. hadoop fs管理文件权限

    sudo addgroup Hadoop#添加一个hadoop组sudo usermod -a -G hadoop larry#将当前用户加入到hadoop组 修改hadoop目录的权限sudo ch ...

  9. 互联网+医疗(FW)

    http://www.yn.xinhuanet.com/health/2015-06/05/c_134300133.htm 互联网+医疗 让合适的病人找合适的医生 www.yn.xinhuanet.c ...

  10. 洛谷P1474 货币系统 Money Systems

    P1474 货币系统 Money Systems 250通过 553提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 母牛们不但创 ...