ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GBase 8a DML语句优化建议-关联优化

2022-01-11 16:33:35  阅读:209  来源: 互联网

标签:JOIN 8a DML value duplicate hash x1 优化 LEFT


JOIN 关联优化策略

逐个排查右表,对于右表是分布表且破坏 hash 分布的,如果数据量小,直接修改为复制表,避免将大表进行拉表操作;

如果数据量大1亿条记录以上的,通过调整 gcluster_hash_redistribute_join_optimize 参数进行验证,参数设置 说明如下:  

0 -- 拉复制表 

1 -- 重分布 

2 -- 自动评估,根据数据量,左右表行数接近使用重分布,如果差距大,则小表拉复制表 。

注意

遇到 left join 语句时,评估右表是否建为复制的原则是: 

  • 如果右表的字段不大于10个,且记录数不大于 5000 万行,则右表创建为复制表;
  • 如果右表字段数大于10个,且记录数不大于 1000 万,则右表创建为复制表。

关联顺序优化

1. 优化原因 

GCluster的优化器不会调整 LEFT JOIN 语句的顺序,而用户语句的 JOIN 顺序可能不是最优,导致查询性能较低。 

2. SQL特征

语句包含多个 LEFT JOIN,多个 LEFT JOIN 的 ON 条件均为 t1.colX = tn.colX 如:

SELECT x1.* FROM x1 
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value 
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x4 ON x1.hash_col = x4.hash_col;

3. 优化场景 

语句特征满足上面的特征描述。LEFT JOIN 的右表,一些表可以直接与左表形成 Hash JOIN 关系,一些表可 能会导致左表发生膨胀。

 4. 优化效果 

让形成 Hash JOIN 关系的 LEFT JOIN 先执行,避免拉表。 

例如 SQL 特征中描述的语句,因为 left join x4 on x1.hash_col = x4.hash_col 是 Hash 分布式 JOIN,因此可以提到最前面,直接分布式执行。 让膨胀率小的 LEFT JOIN 先执行,减小拉表数据量。 如果参与 JOIN 条件的列的值的重复度较高,则很可能会造成 LEFT JOIN 结 果发生膨胀。一般来说,使用主键列参与的 JOIN 条件,膨胀率是最小的; 而重复值越多的列,膨胀率就越可能高。 

例如 SQL 特征中描述的语句,因 left join x3 on x1.no_duplicate_value = x3.no_duplicate_value 对 x1 的膨胀率比 left join x2 on x1.many_duplicate_value = x2.many_duplicate_value 小,因此可以把 left join x3 提到 left join x2 前面。 通过这种调整,避免对膨胀后的数据拉表,减小了拉表数据量。

示例语句:

SELECT x1.* FROM x1 
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value 
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x4 ON x1.hash_col = x4.hash_col;

改写后语句:

SELECT x1.* FROM x1 
LEFT JOIN x4 ON x1.hash_col = x4.hash_col
LEFT JOIN x3 ON x1.no_duplicate_value = x3.no_duplicate_value
LEFT JOIN x2 ON x1.many_duplicate_value = x2.many_duplicate_value;

说明:

  • 因 x1.hash_col = x4.hash_col 使用 Hash 分布列,因此 left join x4 调整到第 1 个位置; 
  • 因 x1.no_duplicate_value = x3.no_duplicate_value 的膨胀率比 x1.many_duplicate_value = x2.many_duplicate_value 的膨胀率低,因此把 left join x3 调整到 left join x2 之前。

标签:JOIN,8a,DML,value,duplicate,hash,x1,优化,LEFT
来源: https://blog.csdn.net/Mr_dar/article/details/122435503

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有