Start here. This is the direct spoken answer to practice first.
Why this question matters
An index is useful only when its key order supports a real predicate and ordering pattern. The same index also consumes storage and adds work to every affected insert, update, and delete.
An index gives the database an ordered access path so it can find matching rows without scanning the entire table. I start from the endpoint's actual filters, joins, and ordering rather than indexing columns in isolation. For an order list filtered by CustomerId and ordered by CreatedAt, a composite index beginning with those columns can support both lookup and ordering. The cost is extra storage and additional maintenance on writes.