data / query / explain
Plan tree visualizer
One structural plan, every modality. Each operator node shows estimate vs actual rows, self time, and share of total. The hot operator is highlighted in accent; divergent row estimates light up in amber.
paste an /explain result · live wiring lands in the next patch
total time
42.1 ms
rows returned
8
operator count
5
hot operator
HashJoin · 28.4 ms
query
SELECT u.team, COUNT(*) AS n, SUM(o.total) AS gmv FROM shop.orders o JOIN shop.users u ON u.id = o.user_id WHERE o.created_at >= NOW() - INTERVAL '7 days' GROUP BY u.team ORDER BY gmv DESC
plan tree · top down
accent border = hot operator · amber = estimate divergence (> 1.5×)
Sort
0.7%
order by gmv DESC
est
8
actual
8
time
0.30 ms
share
0.7%
HashAggregate
5.0%
group by u.team · agg COUNT(*), SUM(o.total)
est
8
actual
8
time
2.1 ms
share
5.0%
HashJoin
hot · 67%
build on users.id (184 keys) · probe orders.user_id
est
18.4k
actual
18.0k
time
28 ms
share
67%
BTreeRangeScan
23%
shop.orders · created_at >= now()-7d · 1 file · zone-map hit
est
18.0k
actual
18.0k
time
9.7 ms
share
23%
SeqScan
3.8%
shop.users · no predicate · 1 file · 8.2 KB
est
184
actual
184
time
1.6 ms
share
3.8%
Limit
1.5%
limit 500
est
500
actual
412
time
0.10 ms
share
1.5%
Filter
21%
kind = 'checkout'
est
612
actual
412
time
1.4 ms
share
21%
BTreeRangeScan
hot · 78%
shop.events · ts >= now()-1h · btree(ts) · 2 files touched, 4 pruned
est
3.2k
actual
2.9k
time
5.3 ms
share
78%
Limit
0.9%
topK = 10
est
10
actual
10
time
0.10 ms
share
0.9%
VectorTopK
hot · 77%
HNSW · m=32 · ef_search=64 · cosine · L0 dist comps 12,488
est
10
actual
10
time
8.6 ms
share
77%
MorselScan
22%
docs.embedding · int8 quantization · buffer pool hit 92%
est
48.0k
actual
48.0k
time
2.5 ms
share
22%
plan trees are JSON-serializable and cached by question hash · see the plan tree in concepts