SQLServer 2012 高效分页
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
- /*
- 功能:生成测试数据.
- */
- create table Test_paging(
- id int identity(1,1) not null primary key,
- TestNumber int not null,
- TestName varchar(20) not null,
- TestDept varchar(10) not null,
- TestDate datetime not null
- )
- go
- with tep(Number,Name,Dept,Date) as
- (
- select 1,cast('0_testname' as varchar(20)),cast('0_DBA' as varchar(10)),getdate()
- union all
- 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()
- from tep
- where Number<=20000000
- )
- insert into Test_paging(TestNumber,TestName,TestDept,TestDate)
- select Number,Name,Dept,Date from tep option(maxrecursion 0)
- --添加索引(我有测试没有索引的情况,2012的优势更加明显,但是我们的数据库不可能不建索引的,故可忽略没有索引的情况)
- create nonclustered index IX_TestDept on Test_paging(
- TestDept
- ) include
- (
- TestName,TestDate
- )
- go
SQL code
- /*
- 功能:测试2012版本中offset/fetch分页.
- */
- dbcc dropcleanbuffers
- dbcc freeproccache
- set statistics io on
- set statistics time on
- set statistics profile on
- declare
- @page int, --第@page页
- @size int, --每页@size行
- @total int --总行数
- select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
- select
- TestName,TestDept,TestDate,@total
- from
- Test_paging
- where
- TestDept = '1000_DBA'
- order by id offset (@page-1)*@size rows fetch next @size rows only
- set statistics io off
- set statistics time off
- set statistics profile off
SQL code
- /*
- 功能:测试2005/2008版本中row_number分页.
- */
- dbcc dropcleanbuffers
- dbcc freeproccache
- set statistics io on
- set statistics time on
- set statistics profile on
- declare
- @page int, --第@page页
- @size int, --每页@size行
- @total int
- select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
- select TestName,TestDept,TestDate,@total from
- (
- select
- TestName,TestDept,TestDate,row_number() over(order by ID) as num
- from
- Test_paging
- where
- TestDept = '1000_DBA'
- ) test where num between (@page-1)*@size+1 and @page*@size order by num
- set statistics io off
- set statistics time off
- set statistics profile off
SQL code
- /*
- 功能:测试2000版本中top分页.
- */
- dbcc dropcleanbuffers
- dbcc freeproccache
- set statistics io on
- set statistics time on
- set statistics profile on
- declare
- @page int, --第@page页
- @size int, --每页@size行
- @total int --总行数
- select @page=20,@size=10,@total=count(1) from Test_paging where TestDept = '1000_DBA'
- select TestName,TestDept,TestDate,@total from
- (
- select top(@size) id,TestName,TestDept,TestDate from
- (
- select top(@page*@size) id,TestName,TestDept,TestDate
- from Test_paging
- where TestDept = '1000_DBA'
- order by id
- )temp1 order by id desc
- )temp2 order by id
- set statistics io off
- set statistics time off
- set statistics profile off
原文:http://bbs.csdn.net/topics/390941777
SQLServer 2012 高效分页的更多相关文章
- T-SQL 使用WITH高效分页
一.WITH AS 含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...
- EFCore中SQLSERVER 2008 的分页问题
自SQLSERVER 2012起新增了 Offset Fetch 语法,因此EFCore默认是以此语法生成相应的分页语句的. 如果我们的目标数据库低于 2012,那么EFCore默认生成的语句在执行的 ...
- SQLSERVER 2012计算上一条,下一条数据的函数
实际需求很普遍,比如求销售数据的每天与头一天的销售增长量.这里用一个汽车行驶数据来做例子: 先初始化数据: CREATE TABLE [dbo].[CarData]( [CarID] [int] NU ...
- SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难:不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险 ...
- SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化
本文是基于上一篇<SQLServer 2012之AlwaysOn -- 指定数据同步链路,消除网络抖动导致的提交延迟问题>的问题继续进行优化:具体背景请参照上文: 前后折腾了一个多 ...
- SQL 2012的分页
今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有): 首先我们来构造测试数据: -- ...
- SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"
最近,需要在SQLServer 2012中,设置datetime的默认值为当前时间. 通过可视化窗口进行设置,而不是将getdate()函数写在sql语句中,也不是将‘2022-2-2 22:22:2 ...
- C#高效分页代码(不用存储过程)
首先创建一张表(要求ID自动编号): create table redheadedfile ( id ,), filenames ), senduser ), primary key(id) ) 然后 ...
- SQLServer 2012异常问题(二)--由安装介质引发性能问题
原文:SQLServer 2012异常问题(二)--由安装介质引发性能问题 问题描述:生产环境一个数据库从SQLSERVER 2008 R2升级到SQLSERVER 2012 ,同时更换硬件,但迁移后 ...
随机推荐
- 初探active mq
mq(message queue),即消息队列,目前比较流行消息队列是active mq 和kafka.本文介绍如何简单的使用active mq. ActiveMQ官网下载地址:http://acti ...
- 错误 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 ...
- IntelliJ IDEA jrebel6 安装,破解
一.Setting中在线安装JRebel插件,install 二.拷贝下载的jrebel.rar解压后 把里面内容覆盖IDEA插件安装目录中此插件目录之下 下载:http://pan.baidu.co ...
- CXF+Spring+Tomcat 案例
多系统(异构系统)进行交互时,一种良好的方式便是调用Web Service,本示例基于Apache组织的CXF 环境:EclipseJDK6Tomcat6CXF2.6.1Spring3 示例项目结构图 ...
- 编译Android VNC Server【转】
本文转载自:http://www.cnblogs.com/fengfeng/p/3289292.html 1,在如下地址checkout源代码,我checkout的版本为0.9.7http://cod ...
- docker随谈
最近在搞Docker,其实去年就听老师说过这个东西,说非常火,当时不以为然,还错把它当成docky.当时想想docky不就是一个快速启动工具么,有什么.现在想想真是惭愧... Docker的牛逼之处网 ...
- 配置JDK环境变量配置及path和classpath的作用
1.环境变量配置 用鼠标右击“我的电脑”->属性->高级->环境变量 JAVA_HOME :D:\Program Files\Java\jdk1.6.0_12(JDK安装路径) Pa ...
- EF1:MVC/EF(Entity Framewok) /First Migrations
1. 概念 Entity Framework: ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案.(此处 ...
- .NETFramework-Drawing:Font
ylbtech-.NETFramework-Drawing:Font 1.返回顶部 1. #region 程序集 System.Drawing, Version=4.0.0.0, Culture=ne ...
- 【137】Photoshop相关功能
1. photoshop中怎样批处理操作 图文教程 来源:http://www.jb51.net/photoshop/57784.html 不知道大家有没有接触过PS里面的批处理呢,当我们要完成数百张 ...