Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Comprehensive Postgres performance optimization and best practices guide maintained by Supabase
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
references/query-composite-indexes.md
1---2title: Create Composite Indexes for Multi-Column Queries3impact: HIGH4impactDescription: 5-10x faster multi-column queries5tags: indexes, composite-index, multi-column, query-optimization6---78## Create Composite Indexes for Multi-Column Queries910When queries filter on multiple columns, a composite index is more efficient than separate single-column indexes.1112**Incorrect (separate indexes require bitmap scan):**1314```sql15-- Two separate indexes16create index orders_status_idx on orders (status);17create index orders_created_idx on orders (created_at);1819-- Query must combine both indexes (slower)20select * from orders where status = 'pending' and created_at > '2024-01-01';21```2223**Correct (composite index):**2425```sql26-- Single composite index (leftmost column first for equality checks)27create index orders_status_created_idx on orders (status, created_at);2829-- Query uses one efficient index scan30select * from orders where status = 'pending' and created_at > '2024-01-01';31```3233**Column order matters** - place equality columns first, range columns last:3435```sql36-- Good: status (=) before created_at (>)37create index idx on orders (status, created_at);3839-- Works for: WHERE status = 'pending'40-- Works for: WHERE status = 'pending' AND created_at > '2024-01-01'41-- Does NOT work for: WHERE created_at > '2024-01-01' (leftmost prefix rule)42```4344Reference: [Multicolumn Indexes](https://www.postgresql.org/docs/current/indexes-multicolumn.html)45