1、首先使用非聚集索引

SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT MemberId ,
MAX(AddDT) AS RecentSucDT ,--最近成功订单日期
COUNT(1) AS SucOrderNum ,--成功订单数
SUM(VExpd) AS SucAmount ,--成功订单金额
DATEDIFF(DD, MIN(AddDT), MAX(AddDT)) AS Tenure ,--活跃天数
DATEDIFF(DD, MAX(AddDT), GETDATE()) AS Rencency--崭新天数
FROM FactOrders o WITH( INDEX(IX_IsBigOrder_O) )
WHERE o.StateId = 21
AND IsBigOrder <> 8
AND IsBigOrder <> 4
GROUP BY MemberId

结果

SQL Server parse and compile time:
CPU time = 16 ms, elapsed time = 16 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. (1121211 row(s) affected)
Table 'FactOrders'. Scan count 5, logical reads 5137168, physical reads 1, read-ahead reads 57581, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times:
CPU time = 27471 ms, elapsed time = 77144 ms.

2、使用ColumnStore Index

SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT MemberId ,
MAX(AddDT) AS RecentSucDT ,--最近成功订单日期
COUNT(1) AS SucOrderNum ,--成功订单数
SUM(VExpd) AS SucAmount ,--成功订单金额
DATEDIFF(DD, MIN(AddDT), MAX(AddDT)) AS Tenure ,--活跃天数
DATEDIFF(DD, MAX(AddDT), GETDATE()) AS Rencency--崭新天数
FROM FactOrders o WITH( INDEX(IX_CS) )
WHERE o.StateId = 21
AND IsBigOrder <> 8
AND IsBigOrder <> 4
GROUP BY MemberId

结果

SQL Server Execution Times:
CPU time = 10499 ms, elapsed time = 19763 ms. SQL Server parse and compile time:
CPU time = 13 ms, elapsed time = 13 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms. (1121211 row(s) affected)
Table 'FactOrders'. Scan count 2, logical reads 23338, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. SQL Server Execution Times:
CPU time = 10422 ms, elapsed time = 20762 ms.

从结果的logical reads上可以看出明显差异,CPU time和elapsed time分别2倍和3倍之多。

3、使用ColumnStore Index不能像使用其它非聚集索引那样没有限制,使用ColumnStoreIndex的限制如下:

1.一个表只能有一个ColumnStore Index

2.不能使用过滤索引

3.索引必须是partition-aligned

4.被索引的表变成只读表

5.被索引的列不能是计算列

6.不能使用Include关键字

由于第4点的限制,以前怕麻烦,所以比较抗拒,从这次的尝试来看,性能提升还是很大的。

计划运行一阵,跟踪瞧瞧如何。

初次尝试ColumnStore Index的更多相关文章

  1. SQL Server-聚焦强制索引查询条件和Columnstore Index(九)

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  2. SQL Server-聚焦强制索引查询条件和Columnstore Index

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  3. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  4. SQL SERVER ->> Columnstore Index

    谈到Columnstore index就不得不提SQL SERVER的压缩技术了.Columnstore就是用到了SQL SERVER的压缩技术.Columnstore又分Columnstore和Co ...

  5. SQL Server 分区表上建立ColumnStore Index 如何添加新分区方法与步骤

    在生产环境中会遇到这样的场景,一个表随着时间的推移,越来越大,这个时候我们开始动手为这个表建立分区来改进查询性能. 但是表过大上百个G的时候,在数据仓库中,为了改进查询性能,我们可以添加在分区表的基础 ...

  6. 初次尝试使用jenkins+python+appium构建自动化测试

    初次尝试使用jenkins+python+appium构建自动化测试 因为刚刚尝试使用jenkins+python+appium尝试,只是一个Demo需要很多完善,先记录一下今天的成果,再接再厉 第一 ...

  7. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

  8. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  9. 孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库

    孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服 ...

随机推荐

  1. 跨域iframe高度自适应(兼容IE/FF/OP/Chrome)

    采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域.跨域两种情况. 由于客户端js使用浏览器的同源安全策 ...

  2. zoj3820 Building Fire Stations 树的中心

    题意:n个点的树,给出n-1条边,每条边长都是1,两个点建立防火站,使得其他点到防火站的最远距离最短. 思路:比赛的时候和队友一开始想是把这两个点拎起来,使得层数最少,有点像是树的中心,于是就猜测是将 ...

  3. Fitness training

    2014-01-14 第一次跑步,结束后大腿酸. 2014-01-15 第二次跑步,跑的过程中臀部酸痛,结束后大腿酸痛. 已经进行跑步8次了,后6次,每次3000米 2014-02-06  plank ...

  4. Swift 自己主动引用计数机制ARC

    Swift 使用自己主动引用计数(ARC)这一机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自 ...

  5. 使用iOS手势UIGestureRecognizer

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...

  6. EntityFrameWork关系映射

    转:http://kb.cnblogs.com/page/108643/ Entity Framework 实体关系总结 作者: dudu  来源: 博客园  发布时间: 2011-10-28 20: ...

  7. KFC数据测试hbase结果

    两个field,一个是KFC数据 一个列放的内容是“same” 每条数据都flush   SLF4J: Failed to load class "org.slf4j.impl.Static ...

  8. [022]c++虚函数、多态性与虚表

    原文出处:http://my.oschina.net/hnuweiwei/blog/280894 目录[-] 多态 虚函数 纯虚函数 虚表 一般继承(无虚函数覆盖) 一般继承(有虚函数覆盖) 多重继承 ...

  9. QString,QByteArray和QBitArray之间的转换

    1:QBitArray2QString :也可以转化为整型, 测试程序: 测试输出结果是否和移位结果相同: [cpp] view plaincopyprint?   QBitArray x; int  ...

  10. linux centos各种问题解决汇总

    1. Linux终端启动图形化程序界面时报错: No protocol specified问题: 这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图 ...