PS

PLAN/SCOPE

Paste a Redshift EXPLAIN output. See the plan as a diagram — not just a wall of text.

Redshift EXPLAIN · client-side · nothing leaves this page
Input
Explain output (required)
Original SQL (optional — enables cross-reference)

Diagnosis

Biggest offender

Click to jump to it in the diagram ↓

Plan diagram

Root on the left, sources on the right. Line thickness ∝ rows flowing through that edge.
100%
Click a step in the diagram, the cost list, or the table below to see the full diagnosis here.

Cost by step

Log-scale total cost, leaves → root. Watch for cliffs.

All steps

Full detail for reference — click a row to select it above.
Step Type Cost (start..total) Rows Width Flags

Reference

What these terms mean
DS_BCAST_INNER / DS_BCAST_ALL
The inner (or all) rows of one side are copied — broadcast — to every compute node before joining. Cheap for small dimension tables, expensive for anything large.
DS_DIST_NONE
Both sides already live on the same slice for matching keys, so no data movement is needed. This is the join you want.
DS_DIST_INNER / DS_DIST_BOTH / DS_DIST_ALL
Redshift redistributes (shuffles) rows across the network before joining, because the tables aren't distributed on the join key. Costly at scale.
Nested Loop
Redshift's fallback when it can't find an equality join condition. Compares every row on one side against every row on the other — scales terribly.
Non-sargable predicate
A function or type cast (e.g. lpad(), ::text) applied to a join or filter column. It usually means a datatype mismatch, and it stops Redshift from pruning blocks efficiently.
Seq Scan
A full read of a table (or subquery result). Normal for small tables; worth a second look on large ones with no Filter.
Cost cliff
A step whose estimated cost is many orders of magnitude above its inputs — a strong signal of a Cartesian-like join or badly matched distribution keys.

PLAN/SCOPE parses and analyzes entirely in your browser. Heuristic thresholds, not a query optimizer — use judgment alongside it.