Sql2012新分页查询offset fetch Sql2005/2008的row_number
SQL2005/2008的Row_Number
http://www.cnblogs.com/Snowfun/archive/2011/10/10/2205772.html
1.OFFSET和FETCH:
这两个关键字在MSDN原型使用方式如代码1所示
OFFSET使用起来很简单,首先在OFFSET之后指定从哪条记录开始取。其中,取值的数可以是常量也可以是变量或者表达式。然后通过FETCH关键字指定取多少条记录。其中,FIRST和NEXT是同义词,和前面的ROW和ROWS一样,它们可以互相替换。同样,这里取的记录条数也可以是常量或者变量表达式。
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ <offset_fetch> ] <offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
[
FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
2.OFFSET和FETCH的简单用法
--创建表
CREATE TABLE [dbo].[TestColumnStore_tcs](
[tcs_id] [int] IDENTITY(1,1) NOT NULL,
[tcs_data] [int] NULL
) ON [PRIMARY]
--插入100万条测试数据, --select * from TestColumnStore_tcs
--select FLOOR(RAND(ABS(CHECKSUM(NEWID())))*100) --获取随机值 declare @index int
set @index=0
while(@index<1000000)
begin
insert into TestColumnStore_tcs(tcs_data) values(FLOOR(RAND(ABS(CHECKSUM(NEWID())))*100))
set @index=@index+1
end
使用OFFSET和FETCH关键字使分页变得如此简单。
--取50万到500020之间的数据
select * from TestColumnStore_tcs order by tcs_id offset 500000 row fetch next 20 rows only

3..OFFSET…FETCH分页对性能的提升
OFFSET和FETCH语句不仅仅是语法糖,还能带来分页效率上的提升。下面我们通过一个例子进行比较SQL Server 2012和SQL Server 2005/2008不同分页方式的分页效率。我们同样取50万到500020之间的数据,性能对比所示。
--SQL2012分页方式
select * from TestColumnStore_tcs order by tcs_id offset 500000 row fetch next 20 rows only; --SQL2008、2005分页方式
with cte as (
select ROW_NUMBER() over(order by tcs_id) as aa,* from TestColumnStore_tcs)
select * from cte where aa>500000 and aa<=500020
--或
select * from
(select ROW_NUMBER() over(order by tcs_id) as aa,* from TestColumnStore_tcs) A
where A.aa between 500001 and 500020
4.分页效率比较
下图:SQL Server 2012分页和SQL Server 05/08之间分页效率对比

下图: 查询计划中我看到SQL Server2012中FETCH..NEXT十分损耗性能。

SQL Server 2012带来的分页效果十分强大,使得大大简化在SQL Server下的分页。对于性能的影响,由于出现了上述执行计划的偏差,暂且不下结论
Sql2012新分页查询offset fetch Sql2005/2008的row_number的更多相关文章
- SQL分页查询,纯Top方式和row_number()解析函数的使用及区别
听同事分享几种数据库的分页查询,自己感觉,还是需要整理一下MS SqlSever的分页查询的. Sql Sever 2005之前版本: select top 页大小 * from 表名 where i ...
- SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT
DECLARE @page INT, @size INT;select @page = 300, @size = 10 SELECT *FROM gpcomp1.GPCUSTWHERE company ...
- Sql 2012 OFFSET / FETCH NEXT BUG
上个星期,测试发现了一个分页的bug--- 无论怎么分页数据的一样.我们所有的分页都是用EF 分页,为什么只有一个模块的分页有问题呢? 后来跟了下sql语句,发现用到是sql2012的新分页方式 OF ...
- .NET Core使用EF分页查询数据报错:OFFSET语法错误问题
在Asp.Net Core MVC项目中使用EF分页查询数据时遇到一个比较麻烦的问题,系统会报如下错误: 分页查询代码: ) * condition.PageSize).Take(condition. ...
- SQL Server 2012使用OFFSET/FETCH NEXT分页及性能测试
最近在网上看到不少文章介绍使用SQL Server 2012的新特性:OFFSET/FETCH NEXT 实现分页.多数文章都是引用或者翻译的这一篇<SQL Server 2012 - Serv ...
- SQLServer分页查询方法整理以及批量插入操作SqlBulkCopy
分页查询 通用方法:sqlserver 2005 + ROW_NUMBER() OVER()方式: ; TOP NOT IN方式 : ID FROM TripDetail ORDER BY ID) O ...
- SqlServer存储过程应用二:分页查询数据并动态拼接where条件
前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...
- SQL2012新特性一次一个数据块----特殊的查询分页
对于数据库人员来说,在软件项目开发的过程中,或多或少的不可避免的就是经常遇到类似“UI查询结果设计”这样的说法,当听到UI设计的时候,多数人的第一反应是“靠!关我毛事!~这是其他人的问题!”. 然而, ...
- Sqlserver中分页,2012后支持offset + fetch,2012之前用rownum嵌套查询
今天发现原先用的sql offset fetch好用,换了一个DB就歇菜 歇菜截图 比较了一下,是数据库版本的问题 一个是13,一个是10 版本低的不支持用offset + fetch 进行分页,ms ...
随机推荐
- 限流之令牌桶算法——RateLimiter官方文档
原文链接 作者:Dimitris Andreou 译者:魏嘉鹏 校对:方腾飞 RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证.如果必要的话,每个acquire() 会阻 ...
- hdu-5117 Fluorescent(状压dp)
题目链接: Fluorescent Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Oth ...
- php curl请求。header头中添加请求信息
function get_data($key,$authorization,$url){ $headers = array( 'api-key:'.$key, 'authorization ...
- httpwebrequest webrequest webresponse 总结
http://blog.csdn.net/flymorn/article/details/6769722 使用,总结,深入,全通,指正
- web应用程序安全攻防---sql注入和xss跨站脚本攻击
kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...
- 在IIS站点中使用数字证书
1. SSL解析(内容来自百度百科) SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安 ...
- asp.net 操作共享目录文件
背景: 服务器A为程序服务器,服务器B为文件服务器.服务器A的程序需要修改删除服务器B的文件. 实现方式:采用虚拟目录映射 操作步骤: 1.在服务器A与服务器B建立相同账号和密码的windows用户 ...
- 【spring源码学习】spring的IOC容器之BeanFactoryPostProcessor接口学习
[一]org.springframework.beans.factory.config.BeanFactoryPostProcessor接口==>该接口实现方法的执行时机:该接口void pos ...
- win10开始键点击无效果
1.在键盘上按下win+R键,或在开始菜单图标上点击右键选择运行: 2.输入powershell,按下“确定”运行:3.在窗口里输入或复制粘贴以下命令,注意只有一行: Get-AppxPackage ...
- 在vue项目中正确的引入jquery和bootstrap
<script>标签引入jquery在vue脚手架里并不适用,需要利用webpack引入jquery 一.第一种方法 1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jq ...