📣
TiDB Cloud Premium is now in public preview. Unlimited growth, instant elasticity, advanced security for enterprise workloads. Try it out →

EXPLAIN ANALYZE



EXPLAIN ANALYZE used to display a query execution plan along with actual run-time performance statistics.

This is useful for analyzing query performance and identifying bottlenecks in a query.

Syntax

EXPLAIN ANALYZE <statement>

Examples

TPC-H Q21:

EXPLAIN ANALYZE SELECT s_name, -> Count(*) AS numwait -> FROM supplier, -> lineitem l1, -> orders, -> nation -> WHERE s_suppkey = l1.l_suppkey -> AND o_orderkey = l1.l_orderkey -> AND o_orderstatus = 'F' -> AND l1.l_receiptdate > l1.l_commitdate -> AND EXISTS (SELECT * -> FROM lineitem l2 -> WHERE l2.l_orderkey = l1.l_orderkey -> AND l2.l_suppkey <> l1.l_suppkey) -> AND NOT EXISTS (SELECT * -> FROM lineitem l3 -> WHERE l3.l_orderkey = l1.l_orderkey -> AND l3.l_suppkey <> l1.l_suppkey -> AND l3.l_receiptdate > l3.l_commitdate) -> AND s_nationkey = n_nationkey -> AND n_name = 'EGYPT' -> GROUP BY s_name -> ORDER BY numwait DESC, -> s_name -> LIMIT 100; +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | explain | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Limit | | ├── limit: 100 | | ├── offset: 0 | | ├── estimated rows: 100.00 | | ├── total process time: 0ms | | └── Sort | | ├── sort keys: [numwait DESC NULLS LAST, s_name ASC NULLS LAST] | | ├── estimated rows: 11000.00 | | ├── total process time: 0ms | | └── EvalScalar | | ├── expressions: [COUNT(*) (#70)] | | ├── estimated rows: 11000.00 | | ├── total process time: 0ms | | └── AggregateFinal | | ├── group by: [s_name] | | ├── aggregate functions: [count()] | | ├── estimated rows: 11000.00 | | └── AggregatePartial | | ├── group by: [s_name] | | ├── aggregate functions: [count()] | | ├── estimated rows: 11000.00 | | ├── total process time: 1ms | | └── HashJoin | | ├── join type: LEFT ANTI | | ├── build keys: [l3.l_orderkey (#52)] | | ├── probe keys: [l1.l_orderkey (#7)] | | ├── filters: [noteq(l3.l_suppkey (#54), l1.l_suppkey (#9))] | | ├── estimated rows: 1633696.00 | | ├── total process time: 788ms | | ├── Filter(Build) | | │ ├── filters: [gt(l3.l_receiptdate (#64), l3.l_commitdate (#63))] | | │ ├── estimated rows: 2400786.33 | | │ ├── total process time: 85ms | | │ └── TableScan | | │ ├── table: default.tpch.lineitem | | │ ├── read rows: 7202359 | | │ ├── read bytes: 42731029 | | │ ├── partitions total: 9 | | │ ├── partitions scanned: 9 | | │ ├── pruning stats: [segments: <range pruning: 9 to 9>, blocks: <range pruning: 9 to 9, bloom pruning: 0 to 0>] | | │ ├── push downs: [filters: [gt(l3.l_receiptdate (#64), l3.l_commitdate (#63))], limit: NONE] | | │ ├── output columns: [l_orderkey, l_suppkey, l_commitdate, l_receiptdate] | | │ └── estimated rows: 7202359.00 | | └── HashJoin(Probe) | | ├── join type: LEFT SEMI | | ├── build keys: [l2.l_orderkey (#36)] | | ├── probe keys: [l1.l_orderkey (#7)] | | ├── filters: [noteq(l2.l_suppkey (#38), l1.l_suppkey (#9))] | | ├── estimated rows: 1633696.00 | | ├── total process time: 905ms | | ├── TableScan(Build) | | │ ├── table: default.tpch.lineitem | | │ ├── read rows: 7202359 | | │ ├── read bytes: 17507468 | | │ ├── partitions total: 9 | | │ ├── partitions scanned: 9 | | │ ├── pruning stats: [segments: <range pruning: 9 to 9>, blocks: <range pruning: 9 to 9, bloom pruning: 0 to 0>] | | │ ├── push downs: [filters: [], limit: NONE] | | │ ├── output columns: [l_orderkey, l_suppkey] | | │ └── estimated rows: 7202359.00 | | └── HashJoin(Probe) | | ├── join type: INNER | | ├── build keys: [orders.o_orderkey (#23)] | | ├── probe keys: [l1.l_orderkey (#7)] | | ├── filters: [] | | ├── estimated rows: 1633696.00 | | ├── total process time: 338ms | | ├── Filter(Build) | | │ ├── filters: [eq(orders.o_orderstatus (#25), "F")] | | │ ├── estimated rows: 550000.00 | | │ ├── total process time: 42ms | | │ └── TableScan | | │ ├── table: default.tpch.orders | | │ ├── read rows: 1650000 | | │ ├── read bytes: 5173599 | | │ ├── partitions total: 3 | | │ ├── partitions scanned: 3 | | │ ├── pruning stats: [segments: <range pruning: 3 to 3>, blocks: <range pruning: 3 to 3, bloom pruning: 3 to 3>] | | │ ├── push downs: [filters: [eq(orders.o_orderstatus (#25), "F")], limit: NONE] | | │ ├── output columns: [o_orderkey, o_orderstatus] | | │ └── estimated rows: 1650000.00 | | └── HashJoin(Probe) | | ├── join type: INNER | | ├── build keys: [nation.n_nationkey (#32)] | | ├── probe keys: [supplier.s_nationkey (#3)] | | ├── filters: [] | | ├── estimated rows: 184766.67 | | ├── total process time: 93ms | | ├── Filter(Build) | | │ ├── filters: [eq(nation.n_name (#33), "EGYPT")] | | │ ├── estimated rows: 16.67 | | │ ├── total process time: 0ms | | │ └── TableScan | | │ ├── table: default.tpch.nation | | │ ├── read rows: 50 | | │ ├── read bytes: 566 | | │ ├── partitions total: 2 | | │ ├── partitions scanned: 2 | | │ ├── pruning stats: [segments: <range pruning: 2 to 2>, blocks: <range pruning: 2 to 2, bloom pruning: 2 to 2>] | | │ ├── push downs: [filters: [eq(nation.n_name (#33), "EGYPT")], limit: NONE] | | │ ├── output columns: [n_nationkey, n_name] | | │ └── estimated rows: 50.00 | | └── HashJoin(Probe) | | ├── join type: INNER | | ├── build keys: [supplier.s_suppkey (#0)] | | ├── probe keys: [l1.l_suppkey (#9)] | | ├── filters: [] | | ├── estimated rows: 11086.00 | | ├── total process time: 447ms | | ├── TableScan(Build) | | │ ├── table: default.tpch.supplier | | │ ├── read rows: 11000 | | │ ├── read bytes: 42015 | | │ ├── partitions total: 2 | | │ ├── partitions scanned: 2 | | │ ├── pruning stats: [segments: <range pruning: 2 to 2>, blocks: <range pruning: 2 to 2, bloom pruning: 0 to 0>] | | │ ├── push downs: [filters: [], limit: NONE] | | │ ├── output columns: [s_suppkey, s_name, s_nationkey] | | │ └── estimated rows: 11000.00 | | └── Filter(Probe) | | ├── filters: [gt(l1.l_receiptdate (#19), l1.l_commitdate (#18))] | | ├── estimated rows: 2400786.33 | | ├── total process time: 59ms | | └── TableScan | | ├── table: default.tpch.lineitem | | ├── read rows: 7202359 | | ├── read bytes: 42731029 | | ├── partitions total: 9 | | ├── partitions scanned: 9 | | ├── pruning stats: [segments: <range pruning: 9 to 9>, blocks: <range pruning: 9 to 9, bloom pruning: 0 to 0>] | | ├── push downs: [filters: [gt(l1.l_receiptdate (#19), l1.l_commitdate (#18))], limit: NONE] | | ├── output columns: [l_orderkey, l_suppkey, l_commitdate, l_receiptdate] | | └── estimated rows: 7202359.00 | +------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Was this page helpful?