PostgreSQL EXPLAIN ANALYZE Visualizer

Paste the output of EXPLAIN (ANALYZE, FORMAT JSON) and see where your query actually spends its time.

๐Ÿ”’ Your query plan is not sent to any server. Parsing and analysis run entirely in your browser โ€” this page works even offline once loaded.

What this tool does

PostgreSQL's EXPLAIN ANALYZE tells you exactly how a query was executed โ€” but the raw output is famously hard to read. Timings are inclusive (each node's time contains all of its children), row counts are averaged per loop, and the real bottleneck is often buried three levels deep in the tree.

This visualizer parses the plan and shows, for every node:

How to get the JSON plan

Run your query with:

EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)
SELECT ... your query ...;

and paste the result above. BUFFERS is optional but recommended โ€” it shows how much I/O each node performed. You can paste directly from psql: the QUERY PLAN header and the + line-continuation characters are cleaned up automatically. Plain-text EXPLAIN format is not supported yet.

โš ๏ธ EXPLAIN ANALYZE really executes the query. For an INSERT/UPDATE/DELETE, wrap it in BEGIN; ... ROLLBACK;.

Warnings this tool detects

Reading the tree

Execution starts at the leaves (scans) and flows up to the root. The horizontal bar on each node is its exclusive time share: a red bar at a leaf Seq Scan means the time is really spent scanning, not in the join above it. Click a node header to expand its details โ€” costs, row counts, filter conditions, buffer usage โ€” and use Copy text summary to paste a compact report into a ticket or a chat.

Note on parallel queries: timing attribution across parallel workers is an approximation โ€” children of a Gather node report loops per worker, so exclusive times there should be read as indicative.