GBase 集群执行计划的 union 优化

union 执行方式 

 集群计划对 union 的固有的执行方式有以下三种方式: 

1、直接下发:能在各个节点上执行 union 操作,结果不需要汇总直接返回客 户端 如:

 select id4 from x1 union select id4 from x2; 

x1 和 x2 是 hash 分布表,且两表的 id4 是 hash 分布列 

select entry_id,id4 from x1 minus select entry_id,id2 from r1; 

x1 是 hash 分布表,id4 是 x1 的 hash 分布列,r1 是复制表。

 2、单节点执行:只需要在一个节点上执行返回结果 如:

 select * from r1 union select * from r2; 

r1 和 r2 是复制表

 select entry_id from x1 where x1.id4=10 union select id2 from x2 where x2.id4=10; 

x1 和 x2 是 hash 分布表,且两个表的分布列都是 id4. 

3、先执行再汇总:各个节点先执行 union,结果汇总到一个节点上,再在汇总节点上执行 distinct。

union 优化原理:

该优化受参数控制,优化主要是增加了计算节点数目,在节点数较多时(10 个以上),性能提升明显。具体优化方式如下: 能够满足“直接下发”和“单节点执行”的,按“直接下发”和“单节点执 行”进行执行;对于不能满足的,通过拉表转换成“直接下发”或“单节点 执行”进行执行,优先转换成直接下发执行。拉表包括拉复制表和 hash 重分布拉表。

union 优化控制参数 

  •  _t_gcluster_union_redist_optimize 

控制是否开启 union 重分布优化.

取值范围[0,1,2] 

默认值为 0 代表关闭

1 表示开启不支持 union 两边对应为 int 和 decimal 列进行重分布优化 

2 表示开启,支持 union 两边对应为 int 和 decimal 列进行重分布优化,

重分布前会将 int 列转换为 decimal 类型,进行重分布 

注: hash 重分布是指将表中的数据按照 union 操作时临时指定的列作为 hash 分布 列进行 hash 重分布。不同的数据类型有不同的 hash 算法,union 优化要求各 子句对应位置上的 hash 列数据类型要相同,如果不相同需转为一致的数据类 型。目前只支持 int->decimal 的数据类型转换,其他类型之间的转换均不支 持。

  • _t_gcluster_union_redist_distinct 

控制子查询拉表时是否带上 distinct。

取值范围[0,1] 默认值为 1,表示带 distinct 

注: 对需要去重的情况,union 子查询拉表时,通常会在投影列中增加 distinct 关 键字先进行一次去重以减少拉表和下一步计算的数据量。当子查询数据重复率较低,进行一次 distinct 减少的数据量不大时,可以设置该参数为 0,减少 一次 distinct。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值