GBase 8a
性能调优
文章

GBase 8a left join查询计划策略

发表于2025-07-19 18:27:08114次浏览1个评论

对于left join,GBase 8a采用将右侧表拉成复制表方式在各节点复制右表,然后再进行local join。举例r如下:

应用进行查询,查询语句为:SELECT uid,name FROM T2 LEFT JOIN T1 ON T1.gid=T2.gid WHERE uid=10;

在数据库中的表结构为:

该查询在GBase 8a MPP Cluster执行步骤如下:
    1、该查询通过GBase 8a MPP Cluster的接口层进行负载均衡后发送给Node1节点上的GCluster组件。
    2、Node1节点上的GCluster接收到该SQL后,进行语法解析,GCluster判断出T1,T2表使用left join进行关联,故GCluster需要把该SQL语句进行内部优化处理,处理过程如下:
    1) GCluster根据关联的右侧表t1的在各个节点上产生一个中间结果表_tpt1。表结构示意图如下:

    2) GCluster通知各个节点中的GNode把T1单表条件过滤后的结果数据传输给3个节点的_tpt1表。
    3) _tpt1表数据构建完毕后,GCluster生成GNode执行的SQL语句,发送给Node1,Node2,Node3的GNode组件的SQL语句如下:
Node1:
SELECT uid,name FROM T2_1 LEFT JOIN _tpt1 ON _tpt1.gid= T2_1.gid WHERE uid=10;
Node2:
SELECT uid,name FROM T2_2 LEFT JOIN _tpt1 ON _tpt1.gid= T2_2.gid WHERE uid=10;
Node3:
SELECT uid,name FROM T2_3 LEFT JOIN _tpt1 ON _tpt1.gid= T2_3.gid WHERE uid=10;
    3、Node1,Node2,Node3节点上的GNode接收到SQL后,进行执行该查询。
    4、 Node1,Node2,Node3节点上的GNode把查询结果返回给Node1节点的GCluster,由它负责把结果返回给应用。

查询计划示意如下:

 

评论

登录后才可以发表评论
崔哥发表于 4个月前
暖气潜催次第春,梅花已谢杏花新。半开半落闲园里,何异荣枯世上人。