Schemint

paste PostgreSQL or JSON, get your schema reviewed like a senior would

PostgreSQL EXPLAIN visualizer

Runs entirely in your browser: the plan is never sent anywhere.

Paste the output of EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) (plain EXPLAIN or text format work too) and get an interactive tree: where the time went, row estimate misses, sequential scans on big tables, spilled sorts. Rendered by pev2, bundled here so nothing leaves the page.

Reading the result

The widest bar is where your query spends its time; start there. A Seq Scan on a large table inside a loop usually means a missing index (the same thing our FK index check flags from the schema side). A big gap between estimated and actual rows sends the planner into the wrong join strategy, and an external merge sort means work_mem was too small for the sort.