原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
参数名称: _t_gcluster_join_multi_hash_optimize_level
取值: [1|2]
默认值: 1
说明: 多列 hash 优化等级
-
只支持静态多列
-
支持静态和动态重分布多列。
修改方式: 可使用 set 语句修改值也可在配置文件中修改值。适用于 session、global范围均可。
详细解释及示例:
该参数控制2表join的行为,当两表join,且两表均为分布表,参与join的等值关联条件列非两表相同的hash分别列时:
取值为1时的执行计划策略为重分布,重分布按照等值条件中的最后一个等值条件进行数据重分布,
取值为2时的执行计划将其中一张表按照另一张表的hash分布列进行重分布,如果hash分布列为多列hash将以多列hash形式进行重分布
如下例:
1)当join两表一张表为多列hash,另一张表为随机分布表时:
CREATE TABLE corrsub1 (
hcol1 int(11) DEFAULT NULL,
hcol2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) DISTRIBUTED BY('hcol1','hcol2') – 多列hash分布表
CREATE TABLE corrsubr2 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) – 随机分布表
set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划
按照join等值列表中的最后一个关联列 t1表hcol2和t2表col2,对两表进行重分布
set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划
按照 t1表的多列hash分布列hcol1和hcol2,对t2表进行重分布
2)当两表均为随机分布表时:
CREATE TABLE corrsubr1 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) – 随机分布表
CREATE TABLE corrsubr2 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) – 随机分布表
set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划
按照t1表和t2表等值join列中的最后一个列进行t1和t2表的动态重分布
set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划
按照t1和t2表等值join列中的全部列进行动态重分布
3)需要注意:当两表分别为hash分布表,但join列表无法对上时,如果有单列hash表,会按照单列进行重分布:
CREATE TABLE corrsub1 (
hcol1 int(11) DEFAULT NULL,
hcol2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) DISTRIBUTED BY('hcol1','hcol2') – 多列hash分布表
CREATE TABLE corrsub2 (
hcol1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
) DISTRIBUTED BY('hcol1') – 单列hash分布表
set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划
原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。