openGauss向量化Merge Join--inner join

简介: openGauss向量化Merge Join--inner join

openGauss VecMergeJoin状态机


VecMergeJoin状态机如下图所示:下面我们以一个例子为例,解释各个join的执行情况。t30和t31的结构及数据如下:


postgres=# select * from t30
id1 | id2
----|----
1  | 1
2  | 3
2  | 3
(3 rows)

    postgres=# select * from t31
    id1 | id2
    ----|----
    1  | 1
    5  | 5
    2  | 3
    (3 rows)


    t30作为外表,t31作为内表,join条件为t30.id1=t31.id1。


    inner join


    1)EXEC_MJ_INITIALIZE_OUTER    取外表值1。进入EXEC_MJ_INITIALIZE_INNER状态2)EXEC_MJ_INITIALIZE_INNER    取内表值1。进入EXEC_MJ_SKIP_TEST状态3)EXEC_MJ_SKIP_TEST    1 = 1,进入EXEC_MJ_JOINTUPLES状态,并标记内表值14)EXEC_MJ_JOINTUPLES    BatchFillInnerAndOuter将内外表值分别放到m_pInnerMatch和m_pOuterMatch中,进入EXEC_MJ_NEXTINNER状态5)EXEC_MJ_NEXTINNER    取内表的下一个值2,和外表值1比较。1 < 2,进入EXEC_MJ_NEXTOUTER状态6)EXEC_MJ_NEXTOUTER    外表值取下一个值2,进入EXEC_MJ_TESTOUTER状态7)EXEC_MJ_TESTOUTER    外表值2,和标记的内表值1比较。2 > 1,接着取内表当前值2,进入EXEC_MJ_SKIP_TEST状态。8)EXEC_MJ_SKIP_TEST    2 = 2,进入EXEC_MJ_JOINTUPLES状态,标记内表位置为29)EXEC_MJ_JOINTUPLES    BatchFillInnerAndOuter将内外表值分别放到m_pInnerMatch和m_pOuterMatch中,进入EXEC_MJ_NEXTINNER状态。10)EXEC_MJ_NEXTINNER    取内表的下一个值5,和外表值2比较。2 < 5,进入EXEC_MJ_NEXTOUTER状态11)EXEC_MJ_NEXTOUTER    取外表的下一个值2,进入EXEC_MJ_TESTOUTER状态12)EXEC_MJ_TESTOUTER    外表值2,和标记的内表值2比较。2 = 2,进入EXEC_MJ_JOINTUPLES状态,调整内表当前扫描位置为标记位置,即2。13)EXEC_MJ_JOINTUPLES    BatchFillInnerAndOuter将内外表值分别放到m_pInnerMatch和m_pOuterMatch中,进入EXEC_MJ_NEXTINNER状态。14)EXEC_MJ_NEXTINNER    取内表的下一个值5,和外表值2比较。2 < 5,进入EXEC_MJ_NEXTOUTER状态15)EXEC_MJ_NEXTOUTER    外表值已取完,结束。此时,m_pInnerMatch和m_pOuterMatch的值分别为:

      m_pInnerMatch m_pOuterMatch
          1             1
          2             2
          2             2

      最终调用函数ProduceResultBatchT,将两个batch投影到一个batch中,输出最终join结果。

      目录
      打赏
      0
      0
      0
      0
      353
      分享
      相关文章
      iLogtail 进化论:重塑可观测采集的技术边界
      iLogtail 作为一款开创性的轻量级日志采集器,历经 13 载风雨,始终致力于高效地从多元化的数据源中萃取、处理可观测信息,并无缝传输至阿里云日志服务或各类日志分析平台。今年,适逢 iLogtail 开源两周年的里程碑时刻,我们将回顾 iLogtail 的技术演进之路,领略其不断突破边界、引领可观测采集未来的创新力量。
      533 92
      基于阿里云的PolarDB MySQL版实现AI增强数据管理
      本文将介绍如何利用阿里云的PolarDB MySQL版结合AI技术,实现数据管理的自动化和智能化。
      768 0
      vscode设置自动保存步骤
      vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
      18047 0
      vscode设置自动保存步骤
      概率分布深度解析:PMF、PDF和CDF的技术指南
      本文将深入探讨概率分布,详细阐述概率质量函数(PMF)、概率密度函数(PDF)和累积分布函数(CDF)这些核心概念,并通过实际示例进行说明。
      851 15
      概率分布深度解析:PMF、PDF和CDF的技术指南
      【Python】已解决:pymssql._pymssql.OperationalError: (20009, b’DB-Lib error message 20009, severity 9:\nUn
      【Python】已解决:pymssql._pymssql.OperationalError: (20009, b’DB-Lib error message 20009, severity 9:\nUn
      444 0
      分布式锁,Redission,其它实现问题讲解,以及面试题回答案例
      分布式锁,Redission,其它实现问题讲解,以及面试题回答案例
      442 1
      PostgreSQL中的变长数据结构Varlena
      在本文是PostgreSQL学习系列---基础数据类型的第二篇,对PG中的Varlena类型进行了介绍,内容还会随着学习进行不断补充~
      1719 0
      Unity——音频管理器(附例子)
      Unity——音频管理器(附例子)
      291 0
      Java时间格式字符串与Date的相互转化
      Java时间格式字符串与Date的相互转化
      767 0
      终于拿到了阿里技术专家分享的552页大型网站架构实战PDF文档
      说在前面 在笔者职业生涯的开端,曾参与了一个合同额每年亿元级的软件项目。
      225 0

      热门文章

      最新文章

      登录插画

      登录以查看您的控制台资源

      管理云资源
      状态一览
      快捷访问