首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >达梦数据库执行计划操作符的讲解

达梦数据库执行计划操作符的讲解

作者头像
bisal
发布2025-11-12 17:38:25
发布2025-11-12 17:38:25
140
举报

最近正学习达梦数据库的SQL审核逻辑,执行计划是重要的路径,官方文档给出了相关执行计划操作符的讲解,和Oracle有些差异,例如达梦默认标的组织结构是索引组织表,和MySQL相同,所以相对于Oracle的全表扫描,达梦对应的是聚集索引扫描,像这种应该是比较关注的一种场景,给出的讲解比较全面了。

但是不同的数据库一些设计细节上还是略有差别,例如Oracle会存储SQL原文,一种是限定长度的存储(sql_text,VARCHAR2(1000)),超过就截断,另一种是通过CLOB存储,基本上能存储任意的SQL语句了。

但是达梦数据库,默认vsql_history中的top_sql_text限制存储1000字节,vsqltext中的sql_text限制存储7168字节,如果要存储原文,需要开启参数,但可能生产环境默认是不开启的。

https://eco.dameng.com/document/dm/zh-cn/pm/dm8-admin-manual-appendix4.html

操作符名称

参数说明

操作说明

AAGR2

grp_num:分组项个数

简单聚集。如果没有分组,则直接计算集函数

sfun_num:返回上层操作符的集函数个数

distinct_flag:集函数参数是否去重

slave_empty:是否限制MPP从节点向主节点传送数据,或本地并行的从线程向主线程传送数据。取值:0:不限制;1:不允许MPP从节点向主节点传送数据;2:不允许本地并行的从线程向主线程传送数据

dist_arg_opt参数:标记是否做distinct优化(分组项+该distinct参数 刚好组成aagr/sagr使用索引的前导列,那么计算该参数的dist时无需使用hash表,直接相邻行比较即可(分组项组内参数已有序)),dist_arg_opt(a1,a2,...an),a对应每个distinct参数,取值0代表此distinct参数不优化计算,反之则为1

ACTRL

无参数

使用自适应计划机制时,控制备用计划转换

AFUN

afun_num:分析函数个数

分析函数计算

partition_num:分区项个数

[colnamelist]:分区项

order_num:排序项个数

[colnamelist]:排序项

ASCN

tabname:表的别名

数组当作表来扫描

used_in_sss3:是否出现在sss3(subquery set search,子查询集合查找)指令中。值为TRUE时,则每次扫描都重新开始

ASSERT

assert_condition:触发断言的布尔表达式条件

约束检查

BLKUP2

idxname(tabname) :索引名(表名)。use_clu_addr:是否从二级索引记录读取对应的聚集索引记录地址对定位聚集索引记录进行优化

定位查找

BMAND

无参数

位图索引的与运算

BMCNT

is_match_out:是否直接根据孩子节点的MATCH-COUNT值计算COUNT(*)

位图索引的行数计算

BMCVT

无参数

位图索引的ROWID转换

BMMG

无参数

位图索引归并

BMOR

无参数

位图索引的或运算

BMSEK

scan_type:扫描类型

位图索引的范围查找

idxname(tabname) :索引名(表名)

scan_range:扫描范围

CONST VALUE LIST

row_num:常量列表行数

常量列表

col_num:常量列表列数

CONSTC

N_PRE_VAR:复合索引跳跃扫描中跳跃扫描的索引前导列个数

用于复合索引跳跃扫描

(out_var):外部var变量序列

CSCN2

idxname(tabname) :索引名(表名)

聚集索引扫描

NEED_SLCT(TRUE):是否进行过滤条件下推的优化

btr_scan:等于1表示使用B树扫描,等于0表示使用簇游标扫描

SAMPLE标记:用于标记节点上是否存在sample表达式,存在则带有此标记,否则无

CSEK2

scan_type:扫描类型

聚集索引数据定位

idxname(tabname) :索引名(表名)

scan_range:扫描范围

CTE_SCN

exp_num:映射列数

递归WITH查询

(queryname):查询名

CTNS

idxname(tabname) :索引名(表名)

用于实现全文索引的CONTAINS

KEY:全文索引的关键词

DELETE

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

删除数据

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:删除类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

hp_opt:是否进行分区列等值过滤优化

DELETE_REMOTE

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

DBLINK删除操作

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:删除类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

hp_opt:是否进行分区列等值过滤优化

DISTINCT

keys:MPP模式下需要分发的列的信息(仅在MPP模式下生效)

去重

L_FULL_OPT_SEMI标记:semi半连接支持l_full优化

L_FULL_OPT_ANTISEMI标记:anti semi连接支持l_full优化

L_FULL_OPT_JOIN标记:其他非semi连接支持l_full优化

DSCN

idxname(tabname) :索引名(表名)

动态视图表扫描

DSSEK

scan_type:扫描类型

DISTINCT列上索引跳跃扫描(单列索引或复合索引)

idxname(tabname) :索引名(表名)

scan_range:扫描范围

ESCN

无参数

外部表扫描

EXCEPT

无参数

集合的差运算,且取差集后删除重复项

EXCEPT ALL

无参数

集合的差运算,且取差集后不删除重复项

EHFD

mpp_opt:数据操作方式,1:数据直接发送给BP端进行删除;0:通过SP端分发

DPC下事务型HUGE表的数据删除

EHFI

(tabname):表名

DPC下事务型HUGE表的数据插入

mpp_opt:数据操作方式,1:数据直接发送给BP端进行插入;0:通过SP端分发

EHFINS

(tabname):表名

DPC下非事务型HUGE表的数据插入

mpp_opt:数据操作方式,1:数据直接发送给BP端进行插入;0:通过SP端分发

EHFU

mpp_opt:数据操作方式,1:数据直接发送给BP端进行更新;0:通过SP端分发

DPC下事务型HUGE表的数据更新

ERECV

stask_no:自身所处的子任务的序号,-1表示root子任务

DPC下用于接收数据,和ESEND对应

l_stask_no:孩子子计划的序号

n_keys:归并排序的key的个数

in_turn:是否按照顺序接收各个发送端的数据

trig:是否在IDU(增删改操作)上存在触发器

PV_FLAG:为1时开启限流,严格一发一收

topN标记:存在此标记则代表erecv节点上含有top语句

ESEND

stask_no:自身所处的子任务的序号,-1表示root子任务

DPC下用于发送数据,和ERECV对应

type:发送类型,用于确定基于何种数据特征对数据进行分发。详细介绍请参考《DM8分布计算集群》5.4小节“数据交换与数据迭代操作符”

sites:站点的RAFT ID和并行度值,“-”表示空。例如(1:3,2:4)表示RAFT ID 1的并行度为3,RAFT ID 2的并行度为4

sql_invoke:当前子任务是否包含了含sql的函数调用

pwj_opt:是否使用了分区智能连接(Partition Wise Join)优化

table:表名,“-”表示空,不为空时表示按照该表的分区定义进行数据分发

empty_type:当哈希连接相关优化的分发计算无合适接收端时的处理策略,取值:INIT:未指定策略,效果等同于ERROR;PRUNE:直接抛弃;ANY:给任意线程处理;ERROR:报错;NOT_EMPTY:通知所有线程右孩子不为空集

keys:表的分发列(仅当table不为空时显示)

INFO_BITS:相关优化信息的标志位,6个标志位自低向高含义如下:bit0:是否在哈希连接左表为广播数据时共享哈希表;bit1:是否使用UNIONALL优化;bit2:是否选择开始执行任务;bit3:是否进行链路发送优化;bit4:是否进行归并排序的链路发送优化;bit5:用于指示当前ESEND发送的目标进行归并排序

PV_FLAG:为1时开启限流,严格一发一收

PI标记:存在此标记则代表esend是并行插入的esend

FAGR2

sfun_num:返回上层操作符的集函数个数

快速聚集,如果没有where条件,且取count(*), 或者基于索引的MAX/MIN值,则可以快速取得集函数的值

idxname:索引名

FILL BTR

index_id:用于填充B树的索引ID

填充B树

FTTS

for_mdis:是否从MPP DISTRIBUTE获得数据

MPP\LPQ下,对临时表的优化

GI

policy:指示表的数据访问粒度,各个取值和含义请参考《DM8分布计算集群》中5.4小节“数据交换与数据迭代操作符”

Granule Iterator,在DMDPC集群中,控制各工作线程的数据访问粒度和分区表裁剪

gi_unit:当前GI迭代器控制的数据扫描操作符起止序号

scan_type[0]:扫描相关信息,格式为:[扫描类型,反向扫描信息(可选),末尾KEY优化信息(可选)]

dynamic_pll:是否包含动态裁剪

has_hp_col_filter标记:用于标记下放是否包含有slct, 且slct仅包含范围分区列的过滤(is_hp_col_filter == TRUE)。has_hp_col_filter(n)中的n表示GI节点下所有叶子操作符属性has_hp_col_filter==TRUE的数目

HAGR2

grp_num:分组项个数

HASH分组,并计算集函数

sfun_num:返回上层操作符的集函数个数

distinct_flag:集函数参数是否去重

top_num:是否只返回前N组

slave_empty:是否限制MPP从节点向主节点传送数据,或本地并行的从线程向主线程传送数据。取值:0:不限制;1:不允许MPP从节点向主节点传送数据;2:不允许本地并行的从线程向主线程传送数据

keys:分组项

real_keys:依赖分组优化中实际使用的分组列

HASH FULL JOIN2

key_num:等值连接条件数

HASH全外连接

mix_aggr:是否将分组操作下放到此步骤进行,仅支持COUNT和SUM函数

mix_dist:是否存在对分组操作和哈希左外连接的优化(即把分组操作下放到哈希左外连接中)

join_condition:连接条件

KEY:等值连接条件

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

HASH LEFT JOIN2

key_num:等值连接条件数

HASH左外连接

partition_keys_num:paritition outer join的KEY个数

ret_null:是否仅返回未匹配的行

mix:需要计算的单个右表列的COUNT函数个数

join_condition:连接条件

KEY:等值连接条件

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

HASH LEFT SEMI JOIN12

(ANTI):是否为反连接

HASH左半连接,其与HASH LEFT_SEMI_JOIN2的区别是该计划为semi join with rowid key,后者是semi join with exp key

join_condition:连接条件

HASH LEFT SEMI JOIN2

(ANTI):是否为反连接

HASH左半连接

key_num:等值连接条件数

join_condition:连接条件

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

HASH LEFT SEMI MULTIPLE JOIN

(ANTI):是否为反连接

多列NOT IN

join_condition:连接条件

HASH RIGHT JOIN2

key_num:等值连接条件数

HASH右外连接

ret_null:是否仅返回未匹配的行

join_condition:连接条件

KEY:等值连接条件

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

HASH RIGHT SEMI JOIN2

key_num:等值连接条件数

HASH右半连接

(ANTI):是否为反连接

join_condition:连接条件

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

INFO_BITS:相关优化信息的标志位,其中bit0指明是否在左表为广播数据时共享0号工作节点哈希表

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

HASH RIGHT SEMI JOIN32

(any_options):取值包括:“= all”、“<> any”、“op all”、“op any”

用于OP SOME/ANY/ALL的HASH右半连接

key_num:等值连接条件数

join_condition:连接条件

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

HASH2 INNER JOIN

(UNIQUE_FLAG):该连接中左右表数据的唯一性策略。取值:LRKEY_UNIQUE:左右表数据分别根据各自KEY值唯一;LKEY_UNIQUE:左表数据根据KEY值唯一,右表则不唯一;RKEY_UNIQUE:右表数据根据KEY值唯一,左表则不唯一

HASH内连接

key_num:等值连接条件数

join_condition:连接条件

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

INFO_BITS:相关优化信息的标志位,6个标志位自低向高含义如下:bit0:是否在哈希连接左表为广播数据时共享0号工作节点的哈希表;bit1:是否使用UNIONALL优化;bit2:是否选择开始执行任务;bit3:是否进行链路发送优化;bit4:是否进行链路发送优化,且需要进行归并;bit5:用于指示当前ESEND发送的目标进行归并排序

HEAP TABLE

stask_no:子任务的序号,-1表示root子任务

临时结果表

sql_invoke:是否已在所属子计划进行含sql的函数调用

table_no:临时结果表编号

full:并行场景数据完整性,取值:0:局部数据;1:完整数据

mpp_full:是否在MPP/DPC模式下表示完整数据

autoid:是否生成autoid列

sites:站点的ID和并行度序列,“-”表示空。例如(1:3,2:4)表示1号站点并行度3,2号站点并行度4

HEAP TABLE SCAN

table_no:临时结果表编号

临时结果表扫描

HFD

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

删除事务型HUGE表数据

HFDEL

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

删除非事务型HUGE表数据

HFI

(tabname):表名

事务型HUGE表插入记录

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

HFI2

(tabname):表名

MPP模式下优化的事务型HUGE表插入记录

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

HFINS2

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

非事务型HUGE表插入记录

HFINS3

无参数

MPP模式下优化的非事务型HUGE表插入记录

HFINS4

无参数

非MPP模式下,针对非事务型HUGE水平分区主表的插入优化,需要参数HFINS_PARALLEL_FLAG=2

HFLKUP

(tabname):表名

根据ROWID检索非事务型HUGE表数据

HFLKUP2

(tabname):表名

根据ROWID检索事务型HUGE表数据

HFS UPDATE

table:表名

更新非事务型HUGE表数据

type:类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

HFSCN

(tabname):表名

非事务型HUGE表的逐行扫描

SAMPLE标记:用于标记节点上是否存在sample表达式,存在则带有此标记,否则无

HFSCN2

(tabname):表名

事务型HUGE表的逐行扫描

NEED_SLCT(TRUE):是否进行过滤条件下推的优化

SAMPLE标记:用于标记节点上是否存在sample表达式,存在则带有此标记,否则无

HFSEK

(tabname):表名

根据KEY检索非事务型HUGE表数据

scan_type:扫描类型

scan_range:扫描范围

SAMPLE标记:用于标记节点上是否存在sample表达式,存在则带有此标记,否则无

HFSEK2

(tabname):表名

根据KEY检索事务型HUGE表数据

scan_type:扫描类型

scan_range:扫描范围

SAMPLE标记:用于标记节点上是否存在sample表达式,存在则带有此标记,否则无

HFU

table:表名

更新事务型HUGE表数据

type:类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

HIERARCHICAL QUERY

(UNIQUE):结果集是否去重

层次查询

key_num:等值连接条件数

connect_by_condition:连接条件

HPM

order_keys:排序项

水平分区表归并排序

is_distinct:是否对排序结果进行去重操作

top_flag:是否有TOP子句需要处理

pll_scan_type:并行处理时扫描相关信息,格式为:[扫描类型,反向扫描信息(可选),末尾KEY优化信息(可选)]

pll_keys:并行处理时分区列计算表达式相关信息,格式为:(分区列的计算表达式中相等的个数,分区列的计算表达式中最后一列起始的个数,分区列的计算表达式中最后一列终止的个数)

INDEX JOIN LEFT JOIN2

join_condition:连接条件

索引左连接

ret_null:是否仅返回未匹配的行

INDEX JOIN SEMI JOIN2

(ANTI):是否为反连接

索引半连接

join_condition:连接条件

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

INSERT

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

插入记录

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:插入类型,取值:UNKNOWN、VALUES、SELECT、MVALUE

hp_opt:是否进行分区列等值过滤优化

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

INSERT_LIST

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

堆表插入

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:插入类型,取值:UNKNOWN、VALUES、SELECT、MVALUE

hp_opt:是否进行分区列等值过滤优化

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

INSERT_REMOTE

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

DBLINK插入操作

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:插入类型,取值:UNKNOWN、VALUES、SELECT、MVALUE

hp_opt:是否进行分区列等值过滤优化

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

INSERT3

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

MPP模式下查询插入优化处理

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:插入类型,取值:UNKNOWN、VALUES、SELECT、MVALUE

hp_opt:是否进行分区列等值过滤优化

mpp_opt:MPP模式下插入优化选项,取值:-1:不优化,DPC环境下取该值;0:不优化,无优化或非MPP环境下取该值;1:在随机插入目标表时分发整个插入计划;2:基于1的特性,省略MDIS分发

INTERSECT

无参数

集合的交运算,且取交集后删除重复项

INTERSECT ALL

无参数

集合的交运算,且取交集后不删除重复项

LOCAL BROADCAST

op_id:本地并行模式下节点所属通讯操作符中的序号

本地并行模式下,消息广播到各线程,包含必要的集函数合并计算

LOCAL COLLECT

op_id:本地并行模式下节点所属通讯操作符中的序号

本地并行模式下数据收集处理,代替LOCAL GATHER

n_grp_by:分组列个数

n_cols:输出列个数

n_keys:分发列的个数

for_sync:该操作符是否仅用于同步

LOCAL DISTRIBUTE

op_id:本地并行模式下节点所属通讯操作符中的序号

本地并行模式下,消息各线程的相互重分发

n_keys:分发列的个数

n_grp:分组列个数

flt_only:是否只需过滤非当前站点。各站点均拥有完整数据时,分发时只需要过滤掉非当前站点的数据

flt_site_data:是否需要过滤站点数据,仅当参数flt_only为TRUE时生效

pipe_mode(TRUE):是否可优化分区表

n:本地并行工作的线程数

fbtr_flag:是否用于fbtr(fast insert b tree)。是则为fbtr_flag(1),否则为fbtr_flag(0)

LOCAL GATHER

op_id:本地并行模式下节点所属通讯操作符中的序号

本地并行模式下,消息收集到主线程

n_grp_by:分组列个数

n_cols:输出列个数

n_keys:分发列的个数

invoke_flag:是否在父亲节点存在函数调用的表达式计算。值为TRUE时从EP不执行该计算且直接丢弃儿子节点相关数据

top_flag:是否有TOP子句需要处理

LOCAL SCATTER

op_id:本地并行模式下节点所属通讯操作符中的序号

本地并行模式下,主线程向各从线程广播消息

notify_only:邮件是否携带通知标记

LOCK TID

无参数

上锁

LSET

无参数

DBLINK查询结果集

MERGE INNER JOIN3

key_num:等值连接条件数

归并内连接

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

MERGE SEMI JOIN3

(ANTI):是否为反连接

归并半连接

join_condition:连接条件

KEY:等值连接条件

KEY_NULL_EQU:连接列的NULL值比较策略。取值:0:NULL与NULL不相等;1:NULL与NULL相等。例如:(0,1,0)表示第1个和第3个连接条件中NULL值视为不等,第2个连接条件中NULL值视为相等

MPP BROADCAST

op_id:MPP模式下节点所属通讯操作符中的序号

MPP模式下,消息广播到各站点,包含必要的集函数合并计算

MPP COLLECT

op_id:MPP模式下节点所属通讯操作符中的序号

用于替换顶层MPP GATHER,除了收集数据到主节点,还增加主从节点间的同步执行功能,防止从节点不断发送数据到主节点造成邮件堆积

n_grp_by:分组列个数

n_cols:输出列个数

n_keys:分发列的个数

for_sync:该操作符是否仅用于同步

MPP DISTRIBUTE

op_id:MPP模式下节点所属通讯操作符中的序号

MPP模式下,消息各站点的相互重分发

n_keys:分发列的个数

n_grp:分组列个数

filter:是否只需过滤非当前站点。各站点均拥有完整数据时,分发时只需要过滤掉非当前站点的数据

rowid_flag:是否根据rowid信息获取站点号进行分发

n:参与计算的站点数,值为0时表示其与EP个数一致

slave_empty:是否限制MPP从节点向主节点传送数据,或本地并行的从线程向主线程传送数据。取值:0:不限制;1:不允许MPP从节点向主节点传送数据;2:不允许本地并行的从线程向主线程传送数据

fbtr_flag:是否用于fbtr(fast insert b tree)。是则为fbtr_flag(1),否则为fbtr_flag(0)

MPP GATHER

op_id:MPP模式下节点所属通讯操作符中的序号

MPP模式下,消息收集到主站点

n_grp_by:分组列个数

n_cols:输出列个数

n_keys:分发列的个数

invoke_flag:是否在父亲节点存在函数调用的表达式计算。值为TRUE时,从EP不执行该计算且直接丢弃儿子节点相关数据

top_flag:是否有TOP子句需要处理

MPP SCATTER

op_id:MPP模式下节点所属通讯操作符中的序号

MPP模式下,主站点向各从站点广播消息

MSYNC

op_id:MPP模式下节点所属通讯操作符中的序号

MPP模式下,数据同步处理

MVCC CHECK

无参数

多版本检查

NCUR2

cursorname:游标名

游标操作

NEST LOOP FULL JOIN2

join_condition:连接条件

嵌套循环全外连接

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

NEST LOOP INDEX JOIN2

join_condition:连接条件

索引内连接

NEST LOOP INNER JOIN2

join_condition:连接条件

嵌套循环内连接

[with_var]:嵌套连接是否使用var方式

NEST LOOP LEFT JOIN2

join_condition:连接条件

嵌套循环左外连接

[with_var]:嵌套连接是否使用var方式

partition_keys_num:paritition outer join的KEY个数

ret_null:是否仅返回未匹配的行

NEST LOOP SEMI JOIN2

(ANTI):是否为反连接

嵌套循环半连接

join_condition:连接条件

[with_var]:嵌套连接是否使用var方式

(colidlist):与var变量相关的左表列序号序列。例如(0,1,3)表示三个var变量依次来自左表的第1、2、4列

flt_batch_exec标记:节点上是否存在filter的批量指令,存在则为flt_batch_exec(1),否则为flt_batch_exec(0)

NSET2

无参数

结果集收集,一般是查询计划的顶层节点

NTTS2

for_mdis:是否从MPP DISTRIBUTE获得数据

临时表,临时存放数据

is_atom:是否要求单行数据

PARALLEL

scan_type:分区表子分区裁剪方式。其返回值为FULL表示所有子分区裁剪,EQU表示等值子分区裁剪,NULL EQU表示空值子分区裁剪,GE_LE表示闭区间裁剪,G_LE表示左开右闭区间裁剪,GE_L表示左闭右开区间裁剪,G_L表示开区间裁剪,GE表示左闭区间裁剪,LE表示右闭区间裁剪,G表示左开区间裁剪,L表示右开区间裁剪,CONTAIN表示等值全文索引扫描,NOT CONTAIN表示空值全文索引扫描V_AND表示列存储表上的多列rowid AND 后查找,REMOTE表示dblink的远程查询,BITMAP表示位图索引扫描,IN LIST表示分区表首列in list优化扫描,BITMAP JOIN表示位图连接索引扫描,INDEX SKIP表示索引跳读(用于复合索引,过滤条件缺少前导列情况),-表示扫描条件缺失

控制水平分区子表的扫描

key_num:分区列计算表达式相关信息,格式为:(分区列的计算表达式中相等的个数,分区列的计算表达式中最后一列起始的个数,分区列的计算表达式中最后一列终止的个数)

simple:是否对包含单分区列的一级分区表进行等值查询优化

range_sfun_opt:aagr+pll+cscn对于range分区列求min/max时的优化标记,若做了优化则为range_sfun_opt(1),否则为range_sfun_opt(0)

PIPE2

无参数

管道。PIPE2操作符仅对左孩子的数据进行过滤处理,在左孩子的处理过程中,会触发PIPE2操作符的右孩子节点执行,并用左孩子数据与之进行匹配过滤

PRJT2

exp_num:映射列数

关系的“投影”(project)运算,用于选择表达式项的计算

is_atom:是否要求单行数据

PSCN

无参数

批量参数当作表来扫描

REMOTE SCAN

tabname@dblink_name:表名@dblink连接名

DBLINK远程表扫描

alias_name:表的别名

condition参数:用于展示dblink发送给远程的过滤条件

RN

无参数

实现ROWNUM查询

RNSK

(rownum_exp):与rownum相关的过滤条件

ROWNUM作为过滤条件时的计算处理

SAGR2

grp_num:分组项个数

如果输入流是有序的,则使用流分组,并计算集函数

sfun_num:返回上层操作符的集函数个数

distinct_flag:集函数参数是否去重

top_num:是否只返回前N组

slave_empty:是否限制MPP从节点向主节点传送数据,或本地并行的从线程向主线程传送数据。取值:0:不限制;1:不允许MPP从节点向主节点传送数据;2:不允许本地并行的从线程向主线程传送数据

keys:分组项

opt_num(n):内层分组项中前n项可以直接代表外层分组项

dist_arg_opt参数:标记是否做distinct优化(分组项+该distinct参数 刚好组成aagr/sagr使用索引的前导列,那么计算该参数的dist时无需使用hash表,直接相邻行比较即可(分组项组内参数已有序)),dist_arg_opt(a1,a2,...an),a对应每个distinct参数,取值0代表此distinct参数不优化计算,反之则为1

SELECT INTO2

无参数

查询插入

SET TRANSACTION

writeable:是否为可更新事务

事务操作(START除外)

iso_level:事务隔离级别,取值:READ UNCOMMITTED:读未提交;READ COMMITTED:读提交;SERIALIZABLE:串行化

SLCT2

(condition):过滤条件

关系的“选择”(select)运算,用于查询条件的过滤

SLCT_PUSHDOWN(TRUE):是否进行过滤条件下推的优化

SORT3

key_num:排序列个数

排序

partition_key_num:已经有序的前导排序列个数

is_distinct:排序时是否进行去重操作

top_flag:是否返回排序后的N行

is_adaptive:是否使用排序的自适应优化(即当下层数据有序时,此次排序实际不进行)

can_discard:意义为xsort节点是否能被摘除(排序操作符在存在can_discard标记的情况下以管道模式执行, 直接上传左孩子数据)

SPL2

stask_no:子任务的序号,-1表示root子任务

临时表。和NTTS2不同的是,它的数据集不向父亲节点传送,而是被编号,用编号和KEY来定位访问;而NTTS2的数据,主动传递给父亲节点

key_num:包含ROWID在内的KEY数

spool_num:SPOOL临时表编号

is_atom:是否限制只能产生单行结果

has_var:外层传入变量存在性探测结果(相关查询需探测外层传入变量)

sites:站点的ID和并行度序列,“-”表示空。例如:(1:3,2:4)表示1号站点并行度3,2号站点并行度4

result_cache:执行结果缓存机制,仅在has_var=1时有效,保存var和结果的关系,当下次相同var传入时,无需执行,直接返回保存的结果即可

SSCN

idxname(tabname) :索引名(表名)

直接使用二级索引进行扫描

btr_scan:等于1表示使用B树扫描,等于0表示使用簇游标扫描

is_global:等于1时表示使用全局索引

SSEK2

scan_type:扫描类型

二级索引数据定位

idxname(tabname) :索引名(表名)

scan_range:扫描范围

is_global:等于1时表示使用全局索引

START TRANSACTION

writeable:是否为可更新事务

启动会话

iso_level:事务隔离级别,取值:READ UNCOMMITTED:读未提交;READ COMMITTED:读提交;SERIALIZABLE:串行化

STAT

无参数

统计信息计算

TOPN2

top_num:TOP子句的行数表达式

取前N条记录

top_off:top_num的偏移量。例如:op_off=3、top_num=4时,从第3行后开始,取第4到第7共4行结果

top_percent:top_num的百分比。例如:top_percent=0.5、top_num=100时,取前50行结果(参数top_off和top_percent不会同时出现)

UFLT

IS_TOP_1:是否在更新操作时相同ROWID只保留1条记录,防止碰到重复数据报错。取值:FALSE:重复数据报错;FIRST:重复数据保留第一行;LAST:重复数据保留最后一行

处理UPDATE FROM子句

UNION

无参数

UNION计算

UNION ALL

CTE:递归WITH查询名

UNION ALL运算

UNION ALL(MERGE)

merge_type:排序方式,取值:A:升序排列;D:降序排列;L:升序排列,NULL值结果排在末尾;1:降序排列,NULL值结果排在末尾

UNION ALL运算(使用归并)

n_merge_keys:表的列数

UNION FOR OR(MERGE)

merge_type:排序方式,取值:A:升序排列;D:降序排列;L:升序排列,NULL值结果排在末尾;1:降序排列,NULL值结果排在末尾

OR过滤的UNION计算(使用归并)

n_merge_keys:表的列数

n_dist_keys:去重的列数

UNION FOR OR2

key_num:需要进行去重操作的列数

OR过滤的UNION计算

outer_join:UNION操作的外连接类型,取值:L:左外连接;R:右外连接;F:全外连接;-:非外连接

UPDATE

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

更新数据

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:更新类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

hp_opt:是否进行分区列等值过滤优化

UPDATE_REMOTE

(partition_type):分区类型,取值:Vertical Partition:垂直分区;Horizon Partition:水平分区;为空表示不分区

DBLINK更新操作

table:表名或视图名,“-”表示空,使用远程操作时会增加“@”+“dblink连接名”作为后缀

type:更新类型,取值:SELECT、CURSOR

mpp_opt:是否通过发送整个计划实现对MPP处理的优化

hp_opt:是否进行分区列等值过滤优化

MODEL

cell_references:MODEL所有不同的单元格引用表达式的数量

MODEL子句

sorted:当可以使用key进行二分搜索或者model唯一性模式为:检查维度的所有组合值对应单元格的唯一性时,sorted(1),否则sorted(0)

MERGE INTO

无参数

合并数据

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bisal的个人杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档