Skip to content

EXPLAIN Output Format

Output Structure

The command's result is a textual description of the plan selected for the statement, optionally annotated with execution statistics.

Take the following SQL as an example, we demonstrate the output structure.

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 outputs a tree structure, named as Execution Plan Tree. Every leaf node includes the information of node type, affected objects and other properties such as cost, rowsize etc. We can simplify the above example only with node type information. It visualizes the whole process of a SQL query, shows which operation nodes it goes through and what are their cost estimation.

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

Node types

In 0.5.0 version, the following node types are supported.

Node Type Name in Explain
Node_VALUE_SCAN Values Scan
Node_TABLE_SCAN Table 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

Property Format Description
cost cost=0.00..0.00 The first is estimated start-up cost. This is the time expended before the output phase can begin, e.g., time to do the sorting in a sort node. The second is estimated total cost. This is stated on the assumption that the plan node is run to completion, i.e., all available rows are retrieved. In practice a node's parent node might stop short of reading all available rows (see the LIMIT example below).
card card=14.00 Estimated column cardinality.
ndv ndv=0.00 Estimated number of distinct values.
rowsize rowsize=0.00 Estimated rowsize.
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] Node output information.
Table Table : 'emp' (0:'empno', 1:'ename', 2:'job', 3:'mgr',) Table definition information after column pruning.
Filter Cond Filter Cond: (CAST(#[0,5] AS DECIMAL128) > CAST(20 AS DECIMAL128)) Filter condition.

Values Scan

Property Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) Estimated cost
output Output: 0 Node output information

Project

Property Format Description
cost (cost=0.00..0.00 card=25.00 ndv=0.00 rowsize=0) Estimated cost
output Output: (CAST(#[0,0] AS INT64) + 2) Node output information

Aggregate

Property Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) Estimated cost
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] Node output information
Group Key Group Key:#[0,0] Key for grouping
Aggregate Functions Aggregate Functions: max(#[0,1]) Aggregate function name

Filter

Property Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) Estimated cost
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] Node output information
Filter Cond Filter Cond: (CAST(#[0,1] AS INT64) > 10) Filter condition

Join

Property Format Description
cost (cost=0.00..0.00 card=14.00 ndv=0.00 rowsize=0) Estimated cost
output Output: #[0,0] Node output information
Join Type: INNER Join Type: INNER Join type
Join Cond Join Cond: (#[0,0] = #[1,0]) Join condition

Sort

Property Format Description
cost (cost=0.00..0.00 card=25.00 ndv=0.00 rowsize=0) Estimated cost
output Output: #[0,0], #[0,1], #[0,2], #[0,3], #[0,4], #[0,5], #[0,6], #[0,7] Node output information
Sort Key Sort Key: #[0,0] DESC, #[0,1] INTERNAL Sort key
Limit Limit: 10 Number limit for output data
Offset Offset: 20 Number offset for output data