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下的分页。对于性能的影响,由于出现了上述执行计划的偏差,暂且不下结论

最新文章

  1. phpexcel导入数据部分数据有误
  2. TestNG插件的安装问题
  3. Android——黑名单
  4. SQL Server 2008R2数据库文件导入到SQL Server 2008数据库中
  5. 使用ffmpeg快速生成视频截图
  6. ios开发--高德地图SDK使用简介
  7. c语言全局变量
  8. Android 获取TextView 显示的字符串宽度
  9. C#常用工具类——Excel操作类
  10. 记录一次webbrowser无法加载 activex 遇到的问题
  11. 高级UNIX环境编程3 FILE IO
  12. 【leetcode】LRU
  13. Android源码编译jar包BUILD_JAVA_LIBRARY 与BUILD_STATIC_JAVA_LIBRARY的区别(二)
  14. PLSQL锁表之后改如何操作
  15. jquery复制图片
  16. java并发实战-基础知识
  17. json,pickle,shelve模块,xml处理模块
  18. tensorflow内存溢出问题
  19. Netty 零拷贝(三)Netty 对零拷贝的改进
  20. Head First Java &amp; 继承

热门文章

  1. Matisse,来自知乎的PhotoPicker
  2. 前端之JavaScript 03
  3. Linux字符界面访问U盘
  4. 西交利物浦大学Java PAPER CODE: CSE105/12-13/S1/Resit Coursework
  5. 数据库需要支持emoji表情
  6. 【解题报告】2014ACM/ICPC上海赛区现场赛B
  7. 【占位】HihoCoder1317 跳舞链
  8. window如何分区
  9. OneNote如何使用
  10. proxifier 注册码 +电脑全局代理设置