A covering index includes all columns needed by a query. The database can answer the query from the index alone.
Example:
Query: SELECT name, email FROM users WHERE status = 'active'
Covering index: CREATE INDEX idx ON users(status, name, email)
Benefits:
- No table lookup needed (index-only scan)
- Indexes are smaller than tables
- Often -x faster
Trade-off: Larger indexes, more storage, slower writes. Use for frequent queries on hot paths.