Run EXPLAIN on your Supabase schema at 100,000 rows. In the browser, before you ship.

demo result · computed by the same engine

FAILSEQ_SCAN_AT_SCALEsrc/query.ts:5supabase.from('posts').select('id, title, created_at').eq('author_id', authorId).order('created_at', { ascending: false }).limit(20)

100,000 rows scanned → 10

create index "posts_author_id_idx" on "public"."posts" ("author_id")

rows scanned vs table size, measured at each size (log scale) — current · with fix

1101001,00010,000100,0001,000 rows10,000100,000100,00010

Try it on your schema

starting Postgres in your browser (PGlite)…

Nothing to install, no database connection: the whole pipeline runs in a Web Worker on a real Postgres 18 (PGlite), and your schema never leaves this tab.

Deterministic: same input, same report, byte for byte, here and in the CLI. Structural checks are splinter's (Supabase Advisor); fixes are applied to the sandbox and re-explained before they are called fixes.