Free Tool

EXPLAIN ANALYZE Explainer

Paste your PostgreSQL query plan and get plain English. Every node decoded — bottlenecks, full scans, row estimate errors, disk spills, and what to do about each one.

Identifies the bottleneck node Explains every node in plain English Runs in your browser — nothing sent to a server

Tip: For the most useful output, run EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) — this includes actual times, row counts, and cache hit stats.

Supports PostgreSQL text format. Get it with: EXPLAIN (ANALYZE, BUFFERS) SELECT ...

What it reads from your plan

Every metric extracted, translated, and flagged when it matters.

Bottleneck node

Automatically identifies which node is consuming the most time and highlights it in the breakdown.

Node types decoded

Seq Scan, Index Scan, Hash Join, Nested Loop, Sort, Materialize — every node explained in plain English with context.

Row estimate errors

Flags when the planner's estimate is 10x off from actual rows — the root cause of most bad query plans.

Disk spills

Detects sorts and hash joins that didn't fit in memory and spilled to disk — and tells you how to fix it with work_mem.

Cache hit ratio

Shows buffer hits vs disk reads. Low cache hit rate means your working set doesn't fit in shared_buffers.

Filter waste

Counts how many rows were read and discarded by Filter conditions — shows the exact gain possible from adding an index.

Frequently Asked Questions

How do I get EXPLAIN ANALYZE output in PostgreSQL?

Run: EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) followed by your query. The BUFFERS option adds cache hit stats. Example: EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM orders WHERE status = 'active';

What does Seq Scan mean in PostgreSQL EXPLAIN?

A Seq Scan (Sequential Scan) means PostgreSQL read every row in the table from start to finish without using an index. On large tables this is slow. The fix is to add an index on the column(s) in your WHERE clause.

Why is my PostgreSQL query slow even with an index?

Common reasons include: stale table statistics (run ANALYZE), the planner underestimating rows and choosing a bad join type, the index not matching the query (e.g., function wrapping the column), or the hash table spilling to disk due to insufficient work_mem.

The plan shows the problem. We fix it.

We connect directly to your database, run EXPLAIN ANALYZE on your real query load, and deliver a prioritised written fix plan within 48 hours.