executor 算子统述

引言

之前的文章中,我介绍了查询执行的总体流程。接下来的几篇文章里,我将学习查询执行过程中的各个算子。

算子

SQL executor 查询执行模型概述这篇文章中,我介绍了火山模型将查询执行树的每一个节点抽象成一个算子,每一个算子代表一类操作(选择、投影、扫描等)。算子的执行是查询执行的关键,无论哪一个算子出现问题,都会导致查询执行结果错误。

opengauss里有30多个算子,总共可以分为以下几类。

算子分类

  1. 扫描算子(Scan Plan Node)

    扫描算子一般位于执行树的叶子结点,通过扫描操作获取表数据作为执行树PlanTree的数据输入。

    扫描算子含义
    SeqScan顺序扫描
    BitmapHeapScan利用Bitmap获取元组
    BitmapIndexScan利用Bitmap获取元组
    TidScan通过Tid获取元组
    IndexScan索引扫描
    IndexOnlyScan直接从索引返回一个元组
    ForeignScan外部表扫描
    WorkTableScan扫描中间结果集
    ValuesScan扫描values列表
    SubQueryScan子查询扫描
    CteScan扫描CommTableExpr
    FunctionScan扫描函数返回结果
    PartIterator从分区迭代中获取元组
  2. 控制算子(Control Plan Node)

    控制算子一般是执行器为了完成一些特殊的任务而引入的算子。

    控制算子含义
    Result处理单计算表达式
    ModifyTable处理插入、更新、删除
    Append集合操作
    MergeAppend集合操作
    RecursiveUnion处理Recursive查询
    BitmapAnd与位图运算
    BitmapOr或位图运算
  3. 物化算子(Materialize Plan Node)

    物化算子用于缓存元组,供后续使用。

    物化算子含义
    Material缓存结点共后续扫描
    Sort处理排序操作
    Group处理有序数据的分组操作
    Agg处理无序数据的分组操作
    Unique去重操作
    Hashhash缓存
    SetOp缓存,用于处理集合
    WindowAgg处理窗口函数
    LockRows处理行级锁
    Limit限制返回元组数量
  1. 连接算子(Join Plan Node)

    连接算子用于对表进行连接,包括内连接与外连接等。

    连接算子含义
    Nestloop循环嵌套连接
    MergeJoin归并连接
    HashJoin哈希连接

小结

本篇文章中,我根据算子的不同用途将opengauss中大部分算子分门归类,总共分成四类:扫描算子、控制算子、物化算子、连接算子。接下来的文章中,我将具体地解析这些算子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值