Atitit  数据存储的分组聚合 groupby的实现attilax总结

1. 聚合操作1

1.1. a、标量聚合 流聚合1

1.2. b、哈希聚合2

1.3. 所有的最优计划的选择都是基于现有统计信息来评估3

1.4. 参考资料3

1. 聚合操作

聚合也是我们在写T-SQL语句的时候经常遇到的,我们来分析一下一些常用的聚合操作运算符的特性和可优化项。

1.1. a、标量聚合 流聚合

标量聚合是一种常用的数据聚合方式,比如我们写的语句中利用的以下聚合函数:MAX()、MIN()、AVG()、COUNT()、SUM()

以上的这些数据结果项的输出基本都是通过流聚合的方式产生,并且这个运算符也被称为:标量聚合

其实,流聚合这种算法最常用的方式是分组(GROUP BY)计算,上面的标量计算也是利用这个特性,只不过把整体形成了一个大组进行聚合。

我么通过如下代码理解

clear the current aggredate results

clear the current group by columnsfor each input row

begin

if the input row does not match the current group by columns

begin

output the current aggreagate results(if any)

clear the current aggreagate results

set the current group by columns to the input row

end

update the aggregate results with the input row

end

流聚合运算符其实过程很简单,维护一个聚合组和聚合值,依次扫描表中的数据,如果能不匹配聚合组则忽略,如果匹配,则加入到聚合组中并且更新聚合值结果项。

举个例子

SELECT ShipAddress,ShipCity,COUNT(*)

FROM Orders

GROUP BY ShipAddress,ShipCity

所以这里我们已经总结出对于流聚合的一种优化方式:尽量避免排序产生,而要避免排序就需要将分组(Group by)字段在索引覆盖范围内。

1.2. b、哈希聚合

上述的流聚合的方式需要提前排序,我们知道排序是一个非常大的消耗过程,所以不适合大表的分组聚合操作,为了解决这个问题,又引入了另外一种聚合运算:哈希聚合

所谓的哈希聚合内部的方法和本篇前面提到的哈希连接机制一样。

哈希聚合不需要排序和过大的内存消耗,并且很容易并行执行计划,利用多CPU同步进行,但是有一个缺点就是:这一过程是阻塞的,也就说哈希聚合不会产生任何结果直到完整的输入。

所以在大数据表中采用哈希聚合是一个很好的应用场景。

我们知道排序是很耗资源的一件事情,但是利用哈希匹配只需要将不同的列值进行提取就可以,所以相比性能而言,无疑哈希匹配算法在这里是略胜一筹的算法。

1.3. 所有的最优计划的选择都是基于现有统计信息来评估

而上面关于这两列内容分布类型SQL Server是怎样知道的?这就是SQL Server的强大的统计信息在支撑了。

在SQL Server中并不是固定的语句就会形成特定的计划,并且生成的特定计划也不是总是最优的,这和数据库现有数据表中的内容分布、数据量、数据类型等诸多因素有关,而记录这些详细信息的就是统计信息。

所有的最优计划的选择都是基于现有统计信息来评估,如果我们的统计信息未及时更新,那么所评估出来最优的执行计划将不是最好的,有时候反而是最烂的。

1.4. 参考资料

SQL Server调优系列基础篇(常用运算符总结——三种物理连接方式剖析) - 指尖流淌 - 博客园.html

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰捍卫者 Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon Al Rapanui

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门  阿尔 拉帕努伊

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源:attilax的专栏   http://www.cnblogs.com/attilax/

--Atiend

转载于:https://www.cnblogs.com/attilax/p/6142980.html

Atitit  数据存储的分组聚合 groupby的实现attilax总结相关推荐

  1. python数据分析及可视化(九)pandas数据规整(分组聚合、数据透视表、时间序列、数据分析流程)

    作业 拼接多个csv文件 去除重复数据,重新索引 自动挡和手动挡数目 计算每个城市二手车数量 统计每个汽车品牌平均售价价格(不是原价) 分组与聚合 如下表所示,5行3列的表格,5种水果分别对应的名称, ...

  2. pandas数据分组聚合——groupby()、aggregate()、apply()、transform()和filter()方法详解

    数据分组 数据分组就是根据一个或多个键(可以是函数.数组或df列名)将数据分成若干组,然后对分组后的数据分别进行汇总计算,并将汇总计算后的结果进行合并,被用作汇总计算的函数称为聚合函数.数据分组的具体 ...

  3. pandas处理数据代码:分组聚合、保留重复行、删除重复行

    txt转csv import numpy as np import pandas as pdtxt=np.loadtxt('1216.txt')txtDF=pDataFrame(txt) txtDF. ...

  4. pandas中通过日期获取年月日季度和透视聚合pivot_table分组聚合groupby的用法

    import pandas as pd import numpy as np# pd.options.display.max_columns = 999 # 允许print输出的最大列数 orders ...

  5. 如何使用agg函数对数据进行分组聚合

    转载自知乎:侦探L  如何使用agg函数对数据进行分组聚合 - 知乎 在上篇文章中,我们详细地介绍了如何使用groupby函数对数据进行分组.而在python的数据分组中,除了groupby函数之外, ...

  6. 时序数据库如何支持秒级上亿数据的查询分组和聚合运算

    https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162499&idx=1& sn=ca43c74ef541b ...

  7. Python数据清洗小技巧——分组聚合

    分组聚合 分组 groupby原理 import numpy as np import pandas as pddf = pd.DataFrame(data = {'sex':np.random.ra ...

  8. php 聚合和组合,reduce端连接-分区分组聚合(示例代码)

    1.1.1         reduce端连接-分区分组聚合 reduce端连接则是利用了reduce的分区功能将stationid相同的分到同一个分区,在利用reduce的分组聚合功能,将同一个st ...

  9. mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql...

    Atitit.自定义存储引擎的接口设计api标准化attilax总结mysql 1.图16.1:MySQL体系结构 存储引擎负责管理数据存储,以及MySQL的索引管理.通过定义的API,MySQL服务 ...

最新文章

  1. 三十六亿的《哪吒》历时五年,如何用AI解决动画创作难题?
  2. 推荐10个毕业3年,月入5万技术大神的公众号!
  3. 使用bpf 排查 fd 泄漏
  4. JavaEE Web开发之Servlet篇
  5. php索引是什么意思,为什么我的php一直说 没索引!下面是代码
  6. 中国半挂车行业投资前景预测与十四五投资战略规划分析报告2021年版
  7. 小白入门商业数据分析师的课程测评
  8. Eclipse And Android 使用心得
  9. java实现未读消息提醒_Android自定义View之未读消息提示
  10. mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...
  11. 安徽省计算机水平考试试卷,第1次安徽省计算机水平考试试卷.doc
  12. 微信昵称可以加特效啦!
  13. amazon php 空间,如何将PHP图像资源放入Amazon Web Services?
  14. 389. Find the Difference
  15. Python入门--for循环
  16. 周期性任务计划: Crontab
  17. 使用 Java 操作 Kubernetes API
  18. java地铁最短距离_地铁最短路径需求分析
  19. elasticsearch + ik
  20. CMake入门教程【核心篇】7.1项目版本号宏

热门文章

  1. SQL Server 2005新特性之使用with关键字解决递归父子关系
  2. [转]const使用详解
  3. ANTLR和StringTemplate
  4. Zookeeper系列四:Zookeeper实现分布式锁、Zookeeper实现配置中心
  5. Python 08 面向对象
  6. Ralink5350开发环境搭建
  7. 一张图看懂单机/集群/热备/磁盘阵列(RAID)
  8. mongodb morphia
  9. 如何使用FF的Firebug组件中的net工具查看页面元素加载消耗时间
  10. 关于GNS3占用很大CPU的问题,很大可能对你有用