Postgres EXPLAIN visualizer
Paste the output of EXPLAIN ANALYZE, as psql text or as JSON, and see where the time goes: a tree with the time each step spent itself, row estimate misses, buffers, sorts and hashes that spilled, and a plain-words list of what to look at first.
Everything runs in your browser. Nothing you paste is sent anywhere or saved: this page is served with a Content Security Policy that stops it from opening connections (connect-src 'none'), and it has no analytics or ads. Open your browser's Network tab to check that no request carries what you paste.
Getting a plan
SET track_io_timing = on;
EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON)
SELECT ...;FORMAT JSON is the most reliable input. The text format psql prints works too: paste it as it is, with the QUERY PLAN header and the (N rows) footer.
ANALYZE runs the statement. For INSERT, UPDATE, DELETE, MERGE, CREATE TABLE AS or anything else that writes, wrap it in a transaction and roll it back:
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) UPDATE orders SET status = 'paid' WHERE id = 42;
ROLLBACK;How to use
Paste a plan and press Show. The bar beside each step is the time that step spent itself, not counting the steps under it, after multiplying by loops and sharing out parallel workers. Click a step for its costs, rows, filters, buffers and worker figures. The findings list ranks what to look at first and says why.
The example is a plan from a throwaway test database.