SQLSERVER2012 出新分页功能啦!!!
近两天我在自己工作机的PC(没有并发,单一线程)上做了SqlServer  2000/ (2005/2008)/2012三个版本下的分页性能比较。

大致可得出以下结果:
1、表数据量200W以内:SQLServer2012 的offset/fetch分页性能和SQLServer2005 Row_number的分页性能(仅考虑出结果速度)基本没区别(难分高下),略高于(大约10%)SQL2000的TOP分页性能。
2、表数据量2000W左右:SQLServer2012 的offset/fetch分页性能略高于SQLServer2005 Row_number的分页性能,主要体现在IO上,但是两者性能可算是远高于(大约25%)SQL2000的TOP分页性能。
3、执行计划2012比2005简单,2005比2000简单,学习简易程度,2012最容易实现。
特此分享一下,下面是我的测试脚本,有兴趣可以自己也试试
测试环境:
Microsoft SQL Server 2014 - 12.0.2000.8 (X64) 
Feb 20 2014 20:04:26 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

sql code

  1. /*
  2. 功能:生成测试数据.
  3. */
  4.  
  5. create table Test_paging(
  6. id int identity(1,1) not null primary key,
  7. TestNumber int not null,
  8. TestName varchar(20) not null,
  9. TestDept varchar(10) not null,
  10. TestDate datetime not null
  11. )
  12. go
  13.  
  14. with tep(Number,Name,Dept,Date) as
  15. (
  16. select 1,cast('0_testname' as varchar(20)),cast('0_DBA' as varchar(10)),getdate()
  17. union all
  18. select Number+1,cast(cast(Number as varchar(20))+'_testname' as varchar(20)),cast(cast(Number/500 as varchar(10))+'_DBA' as varchar(10)) ,getdate()
  19. from tep
  20. where Number<=20000000
  21. )
  22. insert into Test_paging(TestNumber,TestName,TestDept,TestDate)
  23. select Number,Name,Dept,Date from tep option(maxrecursion 0)
  24.  
  25. --添加索引(我有测试没有索引的情况,2012的优势更加明显,但是我们的数据库不可能不建索引的,故可忽略没有索引的情况)
  26. create nonclustered index IX_TestDept on Test_paging(
  27. TestDept
  28. ) include
  29. (
  30. TestName,TestDate
  31. )
  32. go

 

 SQL code

  1. /*
  2. 功能:测试2012版本中offset/fetch分页.
  3. */
  4.  
  5. dbcc dropcleanbuffers
  6. dbcc freeproccache
  7.  
  8. set statistics io on
  9. set statistics time on
  10. set statistics profile on
  11.  
  12. declare
  13. @page int, --第@page
  14. @size int, --每页@size
  15. @total int --总行数
  16.  
  17. select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
  18.  
  19. select
  20. TestName,TestDept,TestDate,@total
  21. from
  22. Test_paging
  23. where
  24. TestDept = '1000_DBA'
  25. order by id offset (@page-1)*@size rows fetch next @size rows only
  26.  
  27. set statistics io off
  28. set statistics time off
  29. set statistics profile off

  

SQL code

  1. /*
  2. 功能:测试2005/2008版本中row_number分页.
  3. */
  4.  
  5. dbcc dropcleanbuffers
  6. dbcc freeproccache
  7.  
  8. set statistics io on
  9. set statistics time on
  10. set statistics profile on
  11.  
  12. declare
  13. @page int, --第@page
  14. @size int, --每页@size
  15. @total int
  16.  
  17. select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
  18.  
  19. select TestName,TestDept,TestDate,@total from
  20. (
  21. select
  22. TestName,TestDept,TestDate,row_number() over(order by ID) as num
  23. from
  24. Test_paging
  25. where
  26. TestDept = '1000_DBA'
  27. ) test where num between (@page-1)*@size+1 and @page*@size order by num
  28.  
  29. set statistics io off
  30. set statistics time off
  31. set statistics profile off

  

SQL code

  1. /*
  2. 功能:测试2000版本中top分页.
  3. */
  4.  
  5. dbcc dropcleanbuffers
  6. dbcc freeproccache
  7.  
  8. set statistics io on
  9. set statistics time on
  10. set statistics profile on
  11.  
  12. declare
  13. @page int, --第@page
  14. @size int, --每页@size
  15. @total int --总行数
  16.  
  17. select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
  18.  
  19. select TestName,TestDept,TestDate,@total from
  20. (
  21. select top(@size) id,TestName,TestDept,TestDate from
  22. (
  23. select top(@page*@size) id,TestName,TestDept,TestDate
  24. from Test_paging
  25. where TestDept = '1000_DBA'
  26. order by id
  27. )temp1 order by id desc
  28. )temp2 order by id
  29.  
  30. set statistics io off
  31. set statistics time off
  32. set statistics profile off

原文:http://bbs.csdn.net/topics/390941777

SQLServer 2012 高效分页的更多相关文章

  1. T-SQL 使用WITH高效分页

    一.WITH AS 含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...

  2. EFCore中SQLSERVER 2008 的分页问题

    自SQLSERVER 2012起新增了 Offset Fetch 语法,因此EFCore默认是以此语法生成相应的分页语句的. 如果我们的目标数据库低于 2012,那么EFCore默认生成的语句在执行的 ...

  3. SQLSERVER 2012计算上一条,下一条数据的函数

    实际需求很普遍,比如求销售数据的每天与头一天的销售增长量.这里用一个汽车行驶数据来做例子: 先初始化数据: CREATE TABLE [dbo].[CarData]( [CarID] [int] NU ...

  4. SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题

    这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难:不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险 ...

  5. SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化

    本文是基于上一篇<SQLServer 2012之AlwaysOn -- 指定数据同步链路,消除网络抖动导致的提交延迟问题>的问题继续进行优化:具体背景请参照上文:     前后折腾了一个多 ...

  6. SQL 2012的分页

    今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有): 首先我们来构造测试数据: -- ...

  7. SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"

    最近,需要在SQLServer 2012中,设置datetime的默认值为当前时间. 通过可视化窗口进行设置,而不是将getdate()函数写在sql语句中,也不是将‘2022-2-2 22:22:2 ...

  8. C#高效分页代码(不用存储过程)

    首先创建一张表(要求ID自动编号): create table redheadedfile ( id ,), filenames ), senduser ), primary key(id) ) 然后 ...

  9. SQLServer 2012异常问题(二)--由安装介质引发性能问题

    原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题 问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后 ...

随机推荐

  1. 初探active mq

    mq(message queue),即消息队列,目前比较流行消息队列是active mq 和kafka.本文介绍如何简单的使用active mq. ActiveMQ官网下载地址:http://acti ...

  2. 错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”。无法将“D:\newbpm\bpm\SureSoft.WebServiceBaseLib\bin\Debug\NBear.Data.dll”添加到网站。 无法添加文件“Bin\NBear.Data.dll”。 拒绝访问。 D:\..

    错误 1 无法将程序集“NBear.Data.dll”复制到文件“D:\newbpm\bpm\SureBpm\Bin\NBear.Data.dll”.无法将“D:\newbpm\bpm\SureSof ...

  3. IntelliJ IDEA jrebel6 安装,破解

    一.Setting中在线安装JRebel插件,install 二.拷贝下载的jrebel.rar解压后 把里面内容覆盖IDEA插件安装目录中此插件目录之下 下载:http://pan.baidu.co ...

  4. CXF+Spring+Tomcat 案例

    多系统(异构系统)进行交互时,一种良好的方式便是调用Web Service,本示例基于Apache组织的CXF 环境:EclipseJDK6Tomcat6CXF2.6.1Spring3 示例项目结构图 ...

  5. 编译Android VNC Server【转】

    本文转载自:http://www.cnblogs.com/fengfeng/p/3289292.html 1,在如下地址checkout源代码,我checkout的版本为0.9.7http://cod ...

  6. docker随谈

    最近在搞Docker,其实去年就听老师说过这个东西,说非常火,当时不以为然,还错把它当成docky.当时想想docky不就是一个快速启动工具么,有什么.现在想想真是惭愧... Docker的牛逼之处网 ...

  7. 配置JDK环境变量配置及path和classpath的作用

    1.环境变量配置 用鼠标右击“我的电脑”->属性->高级->环境变量 JAVA_HOME :D:\Program Files\Java\jdk1.6.0_12(JDK安装路径) Pa ...

  8. EF1:MVC/EF(Entity Framewok) /First Migrations

    1. 概念 Entity Framework: ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.(此处 ...

  9. .NETFramework-Drawing:Font

    ylbtech-.NETFramework-Drawing:Font 1.返回顶部 1. #region 程序集 System.Drawing, Version=4.0.0.0, Culture=ne ...

  10. 【137】Photoshop相关功能

    1. photoshop中怎样批处理操作 图文教程 来源:http://www.jb51.net/photoshop/57784.html 不知道大家有没有接触过PS里面的批处理呢,当我们要完成数百张 ...