#执行算子
# 数据查询算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
SUBQUERY | 子查询标识,表示存在行子查询执行计划,列子查询会转为result计划。 | √ | √ |
VIEW | 视图标识,当行表同层查询存在from子查询或者用户视图时需要增加。 | √ | × |
CONNECT BY | 层次递归查询,对于某一条记录,以深度优先返回与当前记录通过connect by条件关联的所有记录,且返回的记录集是依据prior id=father_id形成的一个包含当前的记录和以当前记录id为根节点的树状结构数据。 | √ | × |
SELECT STATEMENT | 查询语句标识。 | √ | √ |
INSERT STATEMENT | 插入语句标识 | √ | √ |
UPDATE STATEMENT | 数据更新语句标识。 | √ | √ |
DELETE STATEMENT | 数据删除语句标识。 | √ | √ |
MERGE STATEMENT | 数据批量插入语句标识,满足条件时插入语句,在一次全表扫描中可以完成所有INSERT。 | √ | √ |
UNION ALL | 将多个SELECT的结果集合并返回。 | √ | √ |
AGGREGATE | 对未分组的数据执行聚集操作。 | √ | √ |
FOR UPDATE | 查询某行数据的同时加行级锁,防止其他用户更新此条数据。 | √ | √ |
RESULT | 谓词重组后,计划树上需要承载FILTER和投影的独立计划节点。 | √ | √ |
WINDOW | limit数据筛选。用于限定结果集返回行数,具有略过offset的能力。 | √ | √ |
WINDOW SORT | 窗口函数标识,可以同时进行分组和排序,基于排序做分组,且会返回原始信息而非分组后(一组只有一条)的信息。 | √ | √ |
WINDOW HASH | 窗口函数标识,可以同时进行分组和排序,基于哈希做分组,且会返回原始信息而非分组后(一组只有一条)的信息。 | × | √ |
WINDOW NOSORT | 窗口函数标识,该算子对有序数据进行分组并计算窗口函数返回值,且会返回原始信息而非分组后(一组只有一条)的信息。如果下层算子提供的数据顺序已经满足窗口函数所需的排序要求,则可以选用该算子。 | √ | √ |
FIRST ROW | 获取下层扫描算子得到的第一行记录。 | √ | √ |
COUNT | 返回表中选取的行数。 | √ | √ |
COUNT STOPKEY | 使用ROWNUM作为限定条件返回表中选取的行数。 | √ | √ |
# 表扫描算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
TABLE ACCESS FULL | 全表扫描。 | √ | √ |
TABLE ACCESS BY INDEX ROWID | 根据索引查找到对应数据的block的rowid(根据rowid回表)。 | √ | √ |
TABLE ACCESS BY USER ROWID | 指定rowid进行数据block的查找。 | √ | √ |
# 索引扫描算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
INDEX UNIQUE SCAN | 唯一索引扫描,仅适用于where条件是等值查询的SQL。 | √ | √ |
INDEX RANGE SCAN | 索引范围扫描。当扫描对象是唯一索引时,谓词条件必须是范围查询(between、<、>);扫描对象是非唯一性索引时,没有限制。索引范围扫描可能返回多条记录。 | √ | √ |
INDEX RANGE SCAN DESCENDING | 按降序方式进行索引范围扫描。 | √ | √ |
INDEX FULL SCAN | 索引全扫描,扫描目标索引所有叶子块的所有索引行。 | √ | √ |
INDEX FULL SCAN DESCENDING | 按降序方式进行索引全扫描。 | √ | √ |
INDEX FAST FULL SCAN | 索引快速全扫描,类似于索引全扫描,但扫描结果不是有序的。因为是物理读,不是逻辑读索引,同时可以并行读索引。 | √ | √ |
INDEX FULL SCAN (MIN/MAX) | 索引全扫描取最小/最大。不分组情形下,针对索引字段的min、max函数优化,只返回一条记录。 | √ | √ |
INDEX RANGE SCAN (MIN/MAX) | 索引范围扫描取最小/最大。不分组情形下,针对索引字段的min、max函数优化,只返回一条记录。 | √ | √ |
SPATIAL INDEX SCAN | RTREE索引扫描,仅适用于索引字段的ST_Contains、ST_Intersects等空间关系函数的优化。 | √ | × |
BITMAP OR | 索引扫描使用位图的方式进行集合表示。 | √ | × |
# 分区扫描算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
PART SCAN ITERATOR | 一组分区扫描。 | √ | √ |
PART SCAN ALL | 所有分区扫描。 | √ | √ |
PART SCAN SINGLE | 单个分区扫描。 | √ | √ |
PART SCAN COMBINED ITERATOR | 指定二级分区扫描。 | √ | √ |
# AC扫描算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
AC SCAN | AC扫描。 | × | √ |
EXPAND | 展开AC扫描的数据。 | × | √ |
# 分组/排序算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
SORT | 据实际情况生成的排序计划。 | √ | × |
ORDER BY STOPKEY | 据实际情况生成前TOP个数据的排序计划。 | √ | √ |
SORT ORDER BY | order by语句产生的排序计划。 | √ | √ |
HASH DISTINCT | 使用hash算法对数据进行去重。 | √ | √ |
SORT DISTINCT | 使用排序算法对数据进行去重。 | √ | √ |
SORTED DISTINCT | 使用排序算法对已排序的数据进行去重。 | √ | √ |
SORT DISTINCT STOPKEY | 使用排序算法对已排序的数据进行去重,并返回前TOP个。 | √ | √ |
HASH GROUP | 使用hash算法对数据进行分组。 | √ | √ |
SORT GROUP | 使用排序算法对数据进行分组。 | √ | × |
SORT GROUP BY STOPKEY | 使用排序算法对数据进行分组,并返回前TOP个。 | √ | × |
GROUP | 对已排好序或分组的数据进行分组。 | √ | √ |
SORT GROUPING SETS | 使用排序算法,按照多个列进行分组,并对结果进行union操作。 | × | √ |
HASH GROUPING SETS | 使用hash算法,按照多个列进行分组,并对结果进行union操作。 | × | √ |
# HASH JOIN算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
HASH JOIN OUTER | HASH JOIN左外连接。以左表为准,当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空返回。 | √ | √ |
HASH JOIN FULL OUTER | HASH JOIN全外连接。当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空、左表补空+右表数据返回。 | √ | √ |
HASH JOIN SEMI | HASH JOIN左半连接。如果左表中满足指定条件的某行数据在右表中出现过,则此行保留在结果集中。Filter in / exists常改造成SEMI JOIN。 | √ | √ |
HASH JOIN ANTI | HASH JOIN左反半连接。如果左表中满足指定条件的某行数据没有在右表中出现过,则此行数据保留在结果集中。Filter not in / not exists常改造成ANTI JOIN。 | √ | √ |
HASH JOIN | HASH JOIN内连接。将左表物化,右表通过HASH算法从左表查找满足join条件的数据。仅支持等值查询。 | √ | √ |
HASH RIGHT OUTER | HASH JOIN右外连接。以右表为准,当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将右表数据+左表补空返回。 | √ | √ |
HASH RIGHT SEMI | HASH JOIN右半连接。如果右表中满足指定条件的某行数据在左表中出现过,则此行保留在结果集中。 | √ | √ |
HASH RIGHT ANTI | HASH JOIN右反半连接。如果右表中满足指定条件的某行数据没有在左表中出现过,则此行数据保留在结果集中。 | √ | √ |
# MERGE JOIN算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
MERGE SORT | MERGE JOIN的子PLAN,用于参与MERGE JOIN的KEY排序。 | √ | √ |
MERGE JOIN OUTER | MERGE JOIN左外连接。支持等值、大于、大于等于、小于、小于等于作为JOIN条件进行排序。当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空返回。 | √ | √ |
MERGE JOIN FULL OUTER | MERGE JOIN全外连接。支持等值、大于、大于等于、小于、小于等于作为JOIN条件进行排序。当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空、左表补空+右表数据返回。 | √ | √ |
MERGE JOIN SEMI | MERGE JOIN左半连接。如果左表中满足指定条件的某行数据在右表中出现过,则此行保留在结果集中。Filter in / exists常改造成SEMI JOIN。 | √ | √ |
MERGE JOIN ANTI | MERGE JOIN左反半连接。如果左表中满足指定条件的某行数据没有在右表中出现过,则此行数据保留在结果集中。Filter not in / not exists常改造成ANTI JOIN。 | √ | √ |
MERGE JOIN | MERGE JOIN内连接。先将左右表进行排序物化,然后通过JOIN条件的进行merge排序,可以支持等值、大于、大于等于、小于、小于等于的排序。 | √ | √ |
# NEST LOOP算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
NEST LOOPS OUTER | NEST LOOP JOIN左外连接。以左表为准,当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空返回。 | √ | √ |
NEST LOOPS FULL OUTER | NEST LOOP JOIN全外连接。当左右表满足join指定条件则同时返回左右表数据,如果满足不了,则将左表数据+右表补空、左表补空+右表数据返回。 | √ | √ |
NEST LOOPS SEMI | NEST LOOP JOIN左半连接。如果左表中满足指定条件的某行数据在右表中出现过,则此行保留在结果集中。Filter in / exists常改造成SEMI JOIN。 | √ | √ |
NEST LOOPS ANTI | NEST LOOP JOIN左反半连接。如果左表中满足指定条件的某行数据没有在右表中出现过,则此行保留在结果集中。Filter not in / not exists常改造成ANTI JOIN。 | √ | √ |
NEST LOOPS | NEST LOOP 内连接。两表通过循环遍历方式查找满足join条件的数据。 | √ | √ |
# 辅助功能算子
算子名称 | 含义 | 适用行模式 | 适用列模式 |
---|---|---|---|
LOAD TABLE CONVENTIONAL | 在刚才插入数据时,数据库执行了实时统计值收集的动作。 | √ | √ |
PX COORDINATOR | 单机部署中并行执行的标识,表示此标识以下的算子都为并行执行。 | √ | √ |
DISTRIBUTED COORDINATOR | 分布式部署中并行执行的标识,表示此标识以下的算子都为并行执行。 | √ | √ |
PX REMOTE | 表示数据交互包含跨节点的收发。 | √ | √ |
PX LOCAL | 表示数据交互仅在本地收发。 | √ | √ |
MERGE | 数据合并,将多路有序的数据源进行归并成一路数据的算子。 | √ | √ |
ROW TO COL | 行计算转为列计算。 | √ | √ |
COL TO ROW | 列计算转为行计算。 | √ | √ |
MATERIAL | 将输入的数据源物化。 | √ | √ |