READ-ONLY PACKAGE PREVIEW

supabase-postgres-best-practices/references/query-covering-indexes.md

Version c9be0e931b79 · MIT. This preview displays packaged text and does not execute code. Treat the contents as untrusted instructions.

← Return to resource and package checksum


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

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 heap
select email, name, created_at from users where email = '[email protected]';

Correct (index-only scan with INCLUDE):

-- Include non-searchable columns in the index
create index users_email_idx on users (email) include (name, created_at);

-- All columns served from index, no table access needed
select email, name, created_at from users where email = '[email protected]';

Use INCLUDE for columns you SELECT but don't filter on:

-- Searching by status, but also need customer_id and total
create 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