Skip to main content
Version: Nightly

EXPLAIN

EXPLAIN is used to provide the execution plan of a statement.

Syntax

EXPLAIN [ANALYZE] [VERBOSE] SELECT ...

The ANALYZE clause will execute the statement and measure time spent at each plan node and the total rows of the output etc.

The VERBOSE clause will provide more detailed information about the execution plan.

Examples

Explains the following query:

EXPLAIN SELECT * FROM monitor where host='host1'\G

Example:

*************************** 1. row ***************************
plan_type: logical_plan
plan: MergeScan [is_placeholder=false]
*************************** 2. row ***************************
plan_type: physical_plan
plan: MergeScanExec: peers=[4612794875904(1074, 0), ]

The column plan_type indicates whether it's alogical_plan or physical_plan. And the column plan explains the plan in detail.

The MergeScan plan merges the results from multiple regions. The peers array in the MergeScanExec physical plan contains the IDs of the regions that the plan will scan.

Explains the execution of the plan by ANALYZE:

EXPLAIN ANALYZE SELECT * FROM monitor where host='host1'\G

Example:

*************************** 1. row ***************************
stage: 0
node: 0
plan: MergeScanExec: peers=[4612794875904(1074, 0), ] metrics=[output_rows: 0, greptime_exec_read_cost: 0, finish_time: 3301415, first_consume_time: 3299166, ready_time: 3104209, ]

*************************** 2. row ***************************
stage: 1
node: 0
plan: SeqScan: region=4612794875904(1074, 0), partition_count=0 (0 memtable ranges, 0 file 0 ranges) metrics=[output_rows: 0, mem_used: 0, build_parts_cost: 1, build_reader_cost: 1, elapsed_await: 1, elapsed_poll: 21250, scan_cost: 1, yield_cost: 1, ]

*************************** 3. row ***************************
stage: NULL
node: NULL
plan: Total rows: 0

The EXPLAIN ANALYZE command provides metrics about the execution of each stage. The SeqScan plan scans the data from a single region.

Explains the verbose information of the plan execution:

EXPLAIN ANALYZE VERBOSE SELECT * FROM monitor where host='host1';

Example:

*************************** 1. row ***************************
stage: 0
node: 0
plan: MergeScanExec: peers=[4612794875904(1074, 0), ] metrics=[output_rows: 0, greptime_exec_read_cost: 0, finish_time: 3479084, first_consume_time: 3476000, ready_time: 3209041, ]

*************************** 2. row ***************************
stage: 1
node: 0
plan: SeqScan: region=4612794875904(1074, 0), partition_count=0 (0 memtable ranges, 0 file 0 ranges), projection=["host", "ts", "cpu", "memory"], filters=[host = Utf8("host1")], metrics_per_partition: [[partition=0, {prepare_scan_cost=579.75µs, build_reader_cost=0ns, scan_cost=0ns, convert_cost=0ns, yield_cost=0ns, total_cost=789.708µs, num_rows=0, num_batches=0, num_mem_ranges=0, num_file_ranges=0, build_parts_cost=0ns, rg_total=0, rg_fulltext_filtered=0, rg_inverted_filtered=0, rg_minmax_filtered=0, rg_bloom_filtered=0, rows_before_filter=0, rows_fulltext_filtered=0, rows_inverted_filtered=0, rows_bloom_filtered=0, rows_precise_filtered=0, num_sst_record_batches=0, num_sst_batches=0, num_sst_rows=0, first_poll=785.041µs}]] metrics=[output_rows: 0, mem_used: 0, build_parts_cost: 1, build_reader_cost: 1, elapsed_await: 1, elapsed_poll: 17208, scan_cost: 1, yield_cost: 1, ]

*************************** 3. row ***************************
stage: NULL
node: NULL
plan: Total rows: 0

The EXPLAIN ANALYZE VERBOSE command provides the detail metrics about the execution of scan plans.