PostgreSQL's index-only scan can skip heap reads entirely when every needed column is in the index, potentially delivering 2-20x speedups. However, the critical catch is that MVCC visibility information lives in the heap, not the index. The visibility map (a per-table bitmap maintained by VACUUM) is what makes index-only scans actually work: if a heap page's all-visible bit is set, no heap fetch is needed. On actively-changing tables where autovacuum can't keep up, an index-only scan plan can silently degrade into heavy heap I/O. The diagnostic tool is EXPLAIN (ANALYZE)'s 'Heap Fetches:' counter — a high count means a stale visibility map, and the fix is tuning autovacuum (lower autovacuum_vacuum_scale_factor), not disabling the GUC. The enable_indexonlyscan GUC is a diagnostic instrument: turn it off temporarily to compare plans, not a permanent tuning knob.