GBase 8a
性能调优
文章

南大通用GBase8a 静态hash join策略

发表于2025-07-26 16:55:29215次浏览0个评论

应用执行的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;
在数据库中的表结构为:

该查询在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,由它负责把结果返回给应用。

查询计划示意如下:

评论

登录后才可以发表评论