GBASE南大通用技术分享:GBase8a数据库静态hash join策略解析

南大通用GBase 8a数据库应用执行的SQL语句中2个表进行Join操作,该2张表的关联列都是分布表的hash分布列,则GCluster层使用静态hash join的策略进行查询优化,即直接在本地进行local join。
应用进行查询,查询语句为:SELECT uid,name FROM T1 JOIN T2 ON T1.gid=T2.gid WHERE uid=10;
在数据库中的表结构为:
image

该查询在GBase 8a MPP Cluster执行步骤如下:
1、该查询通过GBase 8a MPP Cluster的接口层进行负载均衡后发送给Node1节点上的GCluster组件。
2、Node1节点上的GCluster组件接收到该SQL后,进行语法解析,GCluster判断出T1,T2表的关联列都是hash分布列,故只需把SQL语句中的T1,T2表分别换成各个节点上的分片的表名后分别发送给Node1,Node2,Node3的GNode进行查询执行。
发送给Node1,Node2,Node3的GNode组件的SQL语句如下:
Node1:
SELECT uid,name FROM T1_1 JOIN T2_1 ON T1_1.gid=T2_1.gid WHERE uid=10;
Node2:
SELECT uid,name FROM T1_2 JOIN T2_2 ON T1_2.gid=T2_2.gid WHERE uid=10;
Node3:
SELECT uid,name FROM T1_3 JOIN T2_3 ON T1_3.gid=T2_3.gid WHERE uid=10;
3、Node1,Node2,Node3节点上的GNode接收到SQL后,进行执行该查询。
4、Node1,Node2,Node3节点上的GNode把查询结果返回给Node1节点的GCluster,由它负责把结果返回给应用。

查询计划示意如下:
image

posted @ 2025-07-31 16:14  GBASE南大通用  阅读(3)  评论(0)    收藏  举报