Query Covering Indexes
title: Use Covering Indexes to Avoid Table Lookups impact: MEDIUM-HIGH impactDescription: 2-5x faster queries by eliminating heap fetches tags: indexes, covering-index, include, index-only-scan
Section titled “title: Use Covering Indexes to Avoid Table Lookups impact: MEDIUM-HIGH impactDescription: 2-5x faster queries by eliminating heap fetches tags: indexes, covering-index, include, index-only-scan”Use Covering Indexes to Avoid Table Lookups
Section titled “Use Covering Indexes to Avoid Table Lookups”Covering indexes include all columns needed by a query, enabling index-only scans that skip the table entirely.
Incorrect (index scan + heap fetch):
create index users_email_idx on users (email);
-- Must fetch name and created_at from table heapselect email, name, created_at from users where email = 'user@example.com';Correct (index-only scan with INCLUDE):
-- Include non-searchable columns in the indexcreate index users_email_idx on users (email) include (name, created_at);
-- All columns served from index, no table access neededselect email, name, created_at from users where email = 'user@example.com';Use INCLUDE for columns you SELECT but don’t filter on:
-- Searching by status, but also need customer_id and totalcreate index orders_status_idx on orders (status) include (customer_id, total);
select status, customer_id, total from orders where status = 'shipped';Reference: Index-Only Scans