GBase 8a集群性能优化之延迟group by

如果SQL语句中有group by并且group by列中不包含hash分布列时,集群计划默认使用两阶段group by,即先在各个节点上做group by,做hash重分布,然后再做一次group by。
 

如果两阶段group by的第一阶段无法有效缩减结果集,即group by后结果集变化不大,在结果集数据量仍然很大的情况下,第一遍的group by就基本上相当于白做了。
 

比如查询,select count(*) from tab group by id2,id2非表tab的hash分布列,默认执行计划如下:

Step1: select id2 as c1, count(0) as c2 from tab group by id2 into table temp1(按id2 hash重分布)

Step2: select sum(c2) from temp1 group by c1。

针对Step1 group by无法有效缩减结果集时,group by会没有意义,而且会增加计算负担,可以通过设置参数gcluster_delayed_group_by_optimize为1,开启延迟group by优化。
 

开启延迟group by优化后,第一步在各个节点上的group by就不做了,直接做hash重分布,然后再在各个节点上做group by,这样就可以省掉第一遍group by的耗时。

开启延迟group by优化后,SQL将按如下计划执行:

Step1: select id2 as c1 from tab into table temp1(按id2 hash重分布)

Step2: select count(*) from temp1 group by c1。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值