GBase 8a left join查询计划策略
对于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,由它负责把结果返回给应用。
查询计划示意如下:
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526