Skip to content

EXPLAIN 输出格式

输出结构

语法结构执行结果是为 statement 选择的计划的文本描述,可以选择使用执行统计信息进行注释。

以下以 SQL 为例,演示输出结构:

explain select city,libname1,count(libname1) as a from t3 join t1 on libname1=libname3 join t2 on isbn3=isbn2 group by city,libname1;
+--------------------------------------------------------------------------------------------+
| QUERY PLAN                                                                                 |
+--------------------------------------------------------------------------------------------+
| Project(cost=0.00..0.00 card=400.00 ndv=0.00 rowsize=0                                     |
|   ->  Aggregate(cost=0.00..0.00 card=400.00 ndv=0.00 rowsize=0                             |
|         Group Key:#[0,1], #[0,0]                                                           |
|         Aggregate Functions: count(#[0,0])                                                 |
|         ->  Join(cost=0.00..0.00 card=400.00 ndv=0.00 rowsize=0                            |
|               Join Type: INNER                                                             |
|               Join Cond: (#[1,2] = #[0,0])                                                 |
|               ->  Table Scan on abc.t2(cost=0.00..0.00 card=8.00 ndv=0.00 rowsize=0        |
|               ->  Join(cost=0.00..0.00 card=50.00 ndv=0.00 rowsize=0                       |
|                     Join Type: INNER                                                       |
|                     Join Cond: (#[0,0] = #[1,1])                                           |
|                     ->  Table Scan on abc.t1(cost=0.00..0.00 card=5.00 ndv=0.00 rowsize=0  |
|                     ->  Table Scan on abc.t3(cost=0.00..0.00 card=10.00 ndv=0.00 rowsize=0 |
+--------------------------------------------------------------------------------------------+
13 rows in set (0.00 sec)

EXPLAIN 输出一个名称为 Execution Plan Tree 树形结构,每个叶子节点都包含节点类型、受影响的对象以及其他属性的信息,如 costrowsize 等。我们现在只使用节点类型信息来简化展示上面的示例。Execution Plan Tree 树形结构可以可视化 SQL 查询的整个过程,显示它所经过的操作节点以及它们的成本估计。

Project
└── Aggregate
    └── Join
        └── Table Scan
        └── Join
              └──Table Scan
              └──Table Scan

节点类型

MatrixOne 支持以下节点类型。

节点类型 Explain 中的命名
Node_TABLE_SCAN Table Scan
Node_VALUE_SCAN Values Scan
Node_PROJECT Project
Node_AGG Aggregate
Node_FILTER Filter
Node_JOIN Join
Node_SORT Sort
Node_INSERT Insert
Node_UPDATE Update
Node_DELETE Delete

Table Scan

Feature Format Description
cost cost=0.00..0.00 第一个数是预计的启动成本。这是在输出阶段开始之前花费的时间,例如,在排序节点中进行排序的时间。第二个数是预计的总成本。这是在假设计划节点运行完成的情况下给出的,即检索所有可用的行。实际上,父节点可能在读取所有可用行之前停止(参见下面的“LIMIT”示例)。
card card=14.00 估计的列基数。
ndv ndv=0.00 估计的不同值的数量。
rowsize rowsize=0.00 估计的行大小。
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] 节点输出信息。
Table Table : 'emp' (0:'empno', 1:'ename', 2:'job', 3:'mgr',) 经过列剪枝后的表定义信息。
Filter Cond Filter Cond: (CAST(#[0,5] AS DECIMAL128) > CAST(20 AS DECIMAL128)) 过滤条件。

Values Scan

Feature Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) 预计成本
output Output: 0 节点输出信息

Project

Feature Format Description
cost (cost=0.00..0.00 card=25.00 ndv=0.00 rowsize=0) 预计成本
output Output: (CAST(#[0,0] AS INT64) + 2) 节点输出信息

Aggregate

Feature Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) 预计成本
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] 节点输出信息
Group Key Group Key:#[0,0] 分组的关键字
Aggregate Functions Aggregate Functions: max(#[0,1]) 聚合函数的名称

Filter

Feature Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) 预计成本
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] 节点输出信息
Filter Cond Filter Cond: (CAST(#[0,1] AS INT64) > 10) 过滤条件

Join

Feature Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) 预计成本
output Output: #[0,0] 节点输出信息
Join Type: INNER Join Type: INNER 连接类型
Join Cond Join Cond: (#[0,0] = #[1,0]) 连接条件

Sort

Feature Format Description
cost (cost=0.00..0.00 card=25.00 ndv=0.00 rowsize=0) 预计成本
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4],