SQL EXPLAIN Plan Visualizer
Paste a PostgreSQL or MySQL EXPLAIN plan and see it as a tree, with expensive nodes, full scans and row misestimates highlighted.
Your Data Never Leaves Your Device
Every tool runs entirely in your browser. Nothing you type is uploaded, stored, or logged on our servers.
The SQL EXPLAIN Plan Visualizer turns the dense text output of PostgreSQL and MySQL query plans into a readable tree. Each node shows its operation, relation or index, estimated cost, row counts and, when you used EXPLAIN ANALYZE, the real execution time and loop count.
Nodes that dominate the runtime, sequential or full table scans, row estimates that are off by more than 10x, sorts that spill to disk and MySQL filesorts or temporary tables are highlighted so you know where to add an index or refresh statistics first. Everything is parsed locally in your browser, so your query plans never leave your device.
FAQ
In PostgreSQL run EXPLAIN (ANALYZE, BUFFERS) your_query; or EXPLAIN (ANALYZE, FORMAT JSON) your_query; and copy the output. In MySQL run EXPLAIN your_query;, EXPLAIN FORMAT=JSON your_query; or, on MySQL 8.0.18+, EXPLAIN ANALYZE your_query; (tree format with real timings).
PostgreSQL text and JSON, MySQL JSON, MySQL TREE and EXPLAIN ANALYZE output, and best-effort support for MySQL's classic tabular output. The format is detected automatically, and psql or mysql client decorations such as the QUERY PLAN header and row counts are ignored.
A node is marked expensive when its own share of the plan is at least the chosen threshold (30% by default). The share is based on actual time when the plan has timings, on estimated cost for a plain EXPLAIN, and on row counts for MySQL tabular output. Time spent in child nodes is not counted against the parent.
Full scan marks a Postgres Seq Scan or a MySQL type=ALL table scan. Row misestimate means the planner's row estimate differs from the actual row count by more than 10x, which often points at stale statistics. Disk spill flags sorts or hashes that overflowed memory, and Filesort / Temporary table flag MySQL's extra sorting passes and temporary tables.
A plain EXPLAIN only shows the planner's estimates. Use EXPLAIN ANALYZE (PostgreSQL, MySQL 8.0.18+) to execute the query and capture actual rows, timings and loops. Be careful with ANALYZE on INSERT, UPDATE or DELETE statements because it really runs them; wrap them in a transaction you roll back.
No. The plan is parsed entirely in your browser, so table names, conditions and row counts never leave your device.