Learn the EXPLAIN output: strategies form a tree (seq scan, hash, hash join, nested loop, filter); each node reports cost-to-first-row, cost-to-last-row, estimated rows and width; some strategies block on children before producing a first row. Use ANALYZE (in a transaction + rollback for writes) for real timings, and BUFFERS to see cache vs disk access. Costs are 'story points' and tunable. Not as scary as it looks once you learn the grammar.