The same LIMIT query on an idle Postgres: 78 ms, then 0.07 ms, with every page already in shared_buffers. Ten runs with a standard deviation and a per-run sample on each plan node found the cause (synchronize_seqscans), a control proved it, and the same statement returned different rows with nothing writing. Why one EXPLAIN ANALYZE is a sample of one, and how to read dispersion on a plan.