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种查询语句的查询计划。查询计划选择和其对应的复杂程度和查询所需的开销是成正比的。

 

 

转载于:https://www.cnblogs.com/mfkaudx/p/3759451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值