Index-only scans
If every column your query needs is in the index, PostgreSQL can answer the query without touching the table at all — an index-only scan. This is the fastest possible query plan: half the I/O, much better cache behaviour.
The INCLUDE clause
CREATE INDEX ... ON t (a) INCLUDE (b, c) creates an index keyed on a but with b and c stored alongside (not part of the key, just along for the ride). Queries that filter on a and select b/c become index-only scans without bloating the key with extra columns.
VACUUM and visibility maps
Index-only scans require PostgreSQL to know all rows it'll return are visible — managed via the visibility map. After heavy updates, run VACUUM (or trust autovacuum) to keep the visibility map current; otherwise the planner falls back to checking the heap.