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 ...
随机推荐
- JAVA 文件下载乱码问题解决办法
页面设置隐藏的iframe <iframe id='reqFrame' frameborder='0' style='display:none' allowtransparency='true' ...
- zabbix监控zookeeper
在github找到一个不错的模板,直接导入使用.下载地址: https://github.com/zhujinhe/zookeeper-zabbix-template 监控项监控类型为外部检查 zab ...
- android获取package name
下载apk resigner(此被,,) 另外一个下载url 配置好android 环境,ANDROID_HOME 和路径直接到sdk,将.apk拖到此apk resigner,将会得出package ...
- ios7 uuid的获取方法
ios7后mac地址沦为鸡肋,所以必须得重新想办法获取设备的id信息,apple推荐用UUID,但app重新安装后,UUID需要重设,所以想到把UUID存储到ios系统的keychain中,既然存储在 ...
- rails第一次做项目
最近这几天一直都是在做rails的入门,也就是熟悉rails的增.删.改.查操作,做到rails的入门.这几天的熟悉,只是对于操作的熟悉,对于rails语言的机制还有很多不是很熟悉.昨天接手第一个真正 ...
- Cubieboard编译安装NodeJS经验总结
Cubieboard编译安装NodeJS经验总结,以供新手免走弯路. Cubieboad用的是arm处理器,NodeJs的编译安装上不像pc上那么简单,可以一遍过. 单单make编译一次,就得几乎一个 ...
- 一步一步写一个简单通用的makefile(三)
上一篇一步一步写一个简单通用的makefile(二) 里面的makefile 实现对通用的代码进行编译,这一章我将会对上一次的makefile 进行进一步的优化. 优化后的makefile: #Hel ...
- Linux,实时获取磁盘空间
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <sys/statfs ...
- 深入理解 Spring 事务原理
本文由码农网 – 吴极心原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供 ...
- MongoDB:The Definitive Guide CHAPTER 1 Introduction
MongoDB is a powerful, flexible, and scalable data store. It combines the ability to scale out with ...