Group by 后交rollup,cube,grouping_sets的用法区别

一,相关分析

通常当聚合率和数据量没有大于一定程度时,对于不涉及Rollup,Cube,Grouping_Sets这三中操作的聚合很少出现GC问题。对于Rollup,Cube,Groupubg_sets操作客采用如下方法避免GC。
	Rollup / Cube / Grouping_Sets时,某些场景下,如果多维度的字段比较多内存或者GC会造成性能问题。特别周四实现这三种操作时,记录数会出现倍数的膨胀,调优的时候请务必关注GC情况。如果GC性能表现不佳,建议用手动改动的方式调优,通常是把这三种操作等价的union多个子查询SQL的方式实现。对SQL改写相当于是对它们计算内容的同语义翻译
		1.Rollup改写

在这里插入图片描述

对它等价的拆分改写结果如下,上下两个语句的结果相同:
在这里插入图片描述
2.Cube改写
在这里插入图片描述
在这里插入图片描述
可以看出前三个的Union的结果等同于一个 Rollup ,所以还可以改写为
在这里插入图片描述
3.Grouping Sets的改写
在这里插入图片描述
对它等价的拆分改写结果如下,上下两个语句的结果相同:
在这里插入图片描述
总结:可以按照以上所示的对三种操作的改写形式对语句展开优化,尽可能的减少因内存和GC引发的性能问题。但是,一般情况下,如果GC问题不是特别严重,就不用改写,否则会导致性能更差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值