SQL 2012的分页
今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有):
首先我们来构造测试数据:
--建表
CREATE TABLE [dbo].[MyCustomer](
[id] [int] PRIMARY KEY,
[CustomerNumber] [varchar](25),
[CustomerName] [varchar](25),
[CustomerCity] [varchar](25)
) --生成100W测试数据
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE SET STATISTICS IO ON;
SET STATISTICS TIME ON; ;WITH mycte AS
(
SELECT id=1,CustomerNumber=CAST('0000' AS VARCHAR(25)),
CustomerNamer=CAST('AAAA' AS VARCHAR(25)),
CustomerCity=CAST('CCCC' AS VARCHAR(25))
UNION ALL
SELECT id=id+1,
CustomerNamer=CAST(CHECKSUM(NEWID()) AS VARCHAR(25)),
CustomerNamer=CAST('Name'+CHAR(65+id%26) AS VARCHAR(25)),
CustomerCity=CAST(CHAR(65+id%26) AS VARCHAR(25)) FROM mycte WHERE id<1000000
)
INSERT INTO MyCustomer SELECT * FROM mycte
OPTION(MAXRECURSION 0) SET STATISTICS IO OFF ;
SET STATISTICS TIME OFF;
这里我采用CTE的方式来递归构造数据,有兴趣的童鞋可以试试传统的While循环来对比一下两种的区别。接下来我们分别来看下集中常见的分页语句和他们的时间开销情况:
1、2012的分页情况

2、05~08的分页情况

3、双ToP N分页的情况

上面的三种分页查询的场景是一致的,都是查询50W后的10条记录,记录总量为100W,我们可以看到,在这种情况下,2012的分页效果是最好的。其余的两种差别不是很大,
当然查询越靠前的记录差别会越小,例如我们若把数据查询的范围缩小到500后的10条,前2种在时间的消耗上已经看不出来区别。有兴趣的童鞋可以对比下3种查询语句的查询计划。查询计划选择和其对应的复杂程度和查询所需的开销是成正比的。
SQL 2012的分页的更多相关文章
- sql 2012之后分页查询速度问题
一.SQL Server 2012使用OFFSET/FETCH NEXT分页,比SQL Server 2005/2008中的RowNumber()有显著改进.今天特地作了简单测试,现将过程分享如下: ...
- SQL 2012新分页方式
--2012的OFFSET分页方式 (推荐使用 - 较为方便) select number from spt_values where type='p' order by number offset ...
- [读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例
这是我的文章备份,原始出处:[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例 http://www.dotblogs.com.tw/mis2000lab/archive/ ...
- Sql Server多种分页性能的比较
一.前言 因为工作关系,遇到了非常大的数据量的分页问题,数据总共有8000万吧,这个显然不是简单的分页能够解决的,需要从多多方面考虑,从分表.分库等等.但是这个也让我考虑到了分页性能的问题,在不同数据 ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- SQL 2012 发布与订阅实现数据同步 图解(解决 错误22022)
概念参见:https://msdn.microsoft.com/zh-cn/library/ms151170.aspx 推送订阅 对于推送订阅,发布服务器将更改传播到订阅服务器,而无需订阅服务器发出请 ...
- SQL 2012 镜像 图解(解决1418)
概念:http://blog.chinaunix.net/uid-11231963-id-2150268.html 写的不错 1.环境准备 1.WIN7+SQL 2012 两台机器 如:10.58.8 ...
- SQL 2008 RAISERROR语法在SQL 2012/2014不兼容问题
原文 旧的RAISERROR语法在SQL 2012不兼容问题 raiserror 写法: SQL 2008: raiserror 55030 'text error' SQL 2012: raiser ...
- Windows 8上使用SQL 2012 Configuration Manager
现在使用Windows 8 + Sql Server 2012,而今天想用SQL 2012 Configuraton Manager, 设置别名来访问不同的开发数据库.但发现没能找到SQL 2012 ...
随机推荐
- createElement
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 第一章 用three.js创建你的第一个3D场景
第一章 用three.js创建你的第一个3D场景 到官网下载three.js的源码和示例. 创建HTML框架界面 第一个示例的代码如下: 01-basic-skeleton.html 位于 Learn ...
- ShadowGun Deadzone 放出 GM Kit Mod 包
一向在技术上比较开放的 MadFinger 继上次给出 shadowgun 的关卡包之后,这次更加大方的给出了更加完整的关卡的代码,甚至包括服务器:ShadowGun Deadzone GM Kit. ...
- C# 4.0 新特性
http://www.cnblogs.com/webabcd/archive/2010/05/27/1744899.html 在MVC中Controller的action方法 常用的:可选参数和参数默 ...
- hihocoder 1077线段树
http://hihocoder.com/problemset/problem/1077 #include <bits/stdc++.h> using namespace std; #de ...
- C#中A a=new B()的意义
A a=new B()的意义 前提:A是B的父类. A a = new B(); 或 A a; B b=new B(); a=b; 这一句的过程是这样的, 1)创建一个类A的引用a 2)创建一个类B的 ...
- art template前端模板引擎
偶然看到后台有一段代码 采用的是art template的模板引擎 地址为 http://aui.github.io/artTemplate/ 这段代码很简洁 var html = template( ...
- HttpClient4.5.2 连接池原理及注意事项
随着微服务的流行,服务之间的http调用越来越多,遇到的问题也比较多,写这边文章的目的也是将自己遇到的坑和解决方案跟大家分享 一.为什么要用Http连接池 1.降低延迟:如果不采用连接池,每次连接发起 ...
- JS时间处理,获取天时分秒
//获取时间的天,小时,分钟,秒 function ToTime(second) { second = second / ; var result ; ) % ; ) % ; * )); ) { re ...
- 如何屏蔽Button setClickable与setEnabled
今天想让按键暂时无效,满足一定条件下才可以被用户按到.最初以为是setClickable,谁知搞错了.请看手册: 复制代码代码如下: public void setClickable (boolean ...