How would you analyse and optimise a slow query?
Query optimisation starts by measuring. EXPLAIN shows the plan; EXPLAIN ANALYZE runs it and reports actual rows and time.
Things to look for: sequential scans on large tables, nested loops over big inputs, misestimated row counts, sorts spilling to disk and repeated subplans.
Common improvements:
- Add the right index for filtering and join columns, and consider covering indexes with included columns.
- Keep statistics fresh so the planner estimates well, and avoid functions on indexed columns in predicates.
- Select only needed columns, and avoid
SELECT *. - Rewrite correlated subqueries as joins where appropriate, and reduce the number of joins per query.
- Verify the join order and join types suit the data distribution.
EXPLAIN ANALYZE
SELECT id FROM orders WHERE customer_id = 42 ORDER BY created_at DESC;
Indexes speed reads but slow writes and consume space, so balance them. Always verify with real data volumes, because plans on tiny test tables are misleading.