openGauss源码解析(121)
openGauss源码解析:执行器解析(14)
7.3.3 物化算子
物化算子用于把元组缓存起来供后续使用。物化算子有多种类型,将介绍部分物化算子。如表7-23所示。
表7-23 物化算子列表
算子名称 | 说明 |
Material算子 | 用于缓存子节点执行结果 |
Sort算子 | 用于元组排序(查询包含ORDER BY) |
Limit算子 | 用于限定获取元组数量(查询包含LIMIT/OFFSET子句) |
Group算子 | 用于处理ORDER BY子句 |
Agg算子 | 用于执行含有聚集函数的操作 |
Unique算子 | 用于对子计划返回的元组去重 |
hash算子 | 提供哈希表创建接口 |
Setop算子 | 处理Execept与Intersect两种集合操作 |
WindowAgg算子 | 处理元组窗口聚合 |
LockRows算子 | 用于处理子句包含“FOR UPDATE/FOR SHARE” |
1. Material算子
Material算子用于缓存子节点执行结果,对应的代码源文件是“nodeMaterial.cpp”。Material算子使用函数tuplestorestate缓存迭代输出的元组。算子对应的主要函数如表7-24所示。
表7-24 Material算子主要函数
主要函数 | 说明 |
ExecInitMaterial | 初始化Material状态节点 |
ExecMaterial | 迭代获取元组 |
ExecEndMaterial | 清理Material状态节点 |
ExecResScanMaterial | 重置Material状态节点 |
ExecInitMaterial函数用于初始化Material状态节点,并初始化左子节点。
ExecMaterial函数用于迭代获取元组。根据计划选择ExecMaterialOne函数和ExecMaterialAll函数输出元组:ExecMaterialOne函数从子计划中迭代获取一个元组并放入tuplestorestate对象中;ExecMaterialAll函数从子计划中迭代获取所有的元组并存储在tuplestorestate对象中。
ExecEndMaterial函数是清理函数,主要清理元组缓存。

浙公网安备 33010602011771号