专栏首页物流IT圈SQLServer性能调优-分组聚合

SQLServer性能调优-分组聚合

聚合实际上对数据做分组统计,SQL Server使用两种操作符来实现聚合,流聚合(Stream Aggregation)和哈希聚合(Hash aggration)。流聚合是非阻塞性的,具有流的特性,流聚合操作符;边处理数据,边输出聚合的结果。而哈希聚合是阻塞性的,只要处理完所有的数据,才会输出聚合的结果。

一,流聚合

流聚合要求输入的数据集在group by 即分组列上是有序的,也就是说,流聚合需要排序。分组列的位置和顺序不会影响聚合的结果,因此分组列的排序是任意的。对于索引上的流聚合,由于数据是已经排序的,使用流聚合算法没有排序操作的开销。

流聚合算法是:第一个被读取的数据会创建第一个分组,后续读入的数据都会先和当前的分组匹配,如果匹配,把该行放入到当前的分组中;如果不匹配,创建新的分组,直到所有数据行都处理完成为止,最终对各个分组计算聚合值。

二,哈希聚合

在执行计划中,哈希聚合使用的物理操作符是:Hash Match(Aggregate),实际上,Hash Join也是使用Hash Match作为物理操作符。哈希聚合不需要排序,但是需要授予内存来创建Hash表。优化器倾向于使用哈希聚合来对无序的大表进行聚合操作,哈希聚合的算法:

  • 对于每一个输入行,在group by列上计算哈希值,
  • 检查该行是否映射到hash表中,如果不存在于现有的哈希表,那么把该行插入到哈希表中,创建新的分组;如果存在于现有的哈希表中,把该行插入到现有的分组中。
  • 计算哈希表中的数据,作为最终的结果输出。

哈希聚合使用Hash表来存储各个分组的数据,最后并行计算各个分组中的数据。由于数据是无序的,任何数据行都有可能属于任意一个分组,因此,哈希聚合直到处理完所有的数据行才会输出结果。

Hash聚合在创建哈希表时,需要向系统申请授予内存,当授予内存不足时,需要把哈希表的一部分哈希桶溢出到硬盘的workfiles中。这和Hash Join的内存使用和溢出相同。

三,列存储索引

列存储索引适合于数据仓库中,主要执行大容量数据加载和只读查询,与传统面向行的存储方式相比,使用列存储索引存储可最多提高 10 倍查询性能 ,与使用非压缩数据大小相比,可提供多达 7 倍数据压缩率 。列存储索引使用用“批处理执行模式”的模式,这与行存储使用的逐行数据读取模式对比,性能大幅提升。

列存储索引主要在下面三个特性上提升查询的性能:

  • 行存储使用逐行处理模式,每次只处理一行数据;而列存储索引使用批处理模式,每次处理一批数据行。
  • 行存储是逐行存储(Row Store),每一个Page存储多行数据,而列存储(Column Store)把数据表中的每一列单独存储在Page集合中,这意味着,Page集合中存储的是某一列的数据,而不是一行中所有列的数据。在读取数据时,行存储把一行的所有列都加载到内存,即使有些列根本不会用到;而列存储只把需要的列加载到内存中,不需要的列不会被加载到内存中。
  • 列存储索引自动对数据进行压缩处理,由于同一行的数据具有很高的相似性,压缩率很高,数据读取更快速。

一般情况下,数据仓库的查询语句只会查询少数几个列的数据,其他列的数据不需要加载到内存中,这就使得列存储特别适合用于数据仓库中对星型连接(Star- Join)进行聚合查询,所谓星型连接(Star-Join)的聚合查询是指对一个大表(Large Table)和多个小表(Little Table)进行连接,并对Large Table 进行聚合查询。在数据库仓库中,是指事实表和维度表的连接。在大表上创建列存储索引,SQL Server 引擎将充分使用批处理模式(Batch processing mode)来执行星型查询,获取更高的查询性能。

本文分享自微信公众号 - 物流IT圈(exiter18)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring AOP实现接口验签

    因项目需要与外部对接,为保证接口的安全性需要使用aop进行方法的验签;在调用方法的时候,校验外部传入的参数进行验证,验证通过就执行被调用的方法,验证失败...

    物流IT圈
  • 对物流园区建设的思考与建议

    物流业作为支撑国民经济的基础性和综合性产业,在国务院出台了调整和振兴物流业的规划政策后,更是受到企业和政府的格外关注,各级地方政府也相继出台政策措施支持区域物流...

    物流IT圈
  • 【原创】从地图到线路规划 (七)

    地图领域还有图吧、腾讯等其他产品。基于历史、市场、技术的沉淀,百度和高德在用户数上保持领先,至于图吧和腾讯地图,用户数相对要少,没有可比性。

    物流IT圈
  • 干货 | 通透理解Elasticsearch聚合

    使用Elasticsearch的过程中,除了全文检索,或多或少会做统计操作,而做统计操作势必会使用Elasticsearch聚合操作。

    铭毅天下
  • 机器学习储备(1):协方差和相关系数

    为了深刻理解机器学习算法的原理,首先得掌握其中涉及到的一些基本概念和理论,比如概率,期望,标准差,方差。在这些基本概念上,又衍生出了很多重要概念,比如协方差,相...

    double
  • RAdam优化器又进化:与LookAhead强强结合,性能更优速度更快

    上周,来自UIUC的中国博士生Liyuan Liu提出了一种兼具Adam和SGD两者之美的新优化器RAdam,收敛速度快,还很鲁棒,一度登上了GitHub趋势榜...

    算法工程师之路
  • RAdam优化器又进化:与LookAhead强强结合,性能更优速度更快

    上周,来自UIUC的中国博士生Liyuan Liu提出了一种兼具Adam和SGD两者之美的新优化器RAdam,收敛速度快,还很鲁棒,一度登上了GitHub趋势榜...

    量子位
  • JVM系列七(JIT 即时编译器).

    即时编译器(Just In Time Compiler),也称为 JIT 编译器,它的主要工作是把热点代码编译成与本地平台相关的机器码,并进行各种层次的优化,从...

    JMCui
  • 常用物联网应用协议汇总

    本文罗列下市面上物联网通信中的各类消息技术-即工作在网络通信的应用层协议,总结下它们各自特点、特定的物联网应用场景等。 这类协议都直接用于在无线或有线网络环境下...

    CSDN技术头条
  • TensorFlow入门 - 使用TensorFlow甄别图片中的时尚单品

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    Steve Wang

扫码关注云+社区

领取腾讯云代金券