AdvancedPerformance & Indexes

BRIN index for time-series tables

The query

SQL
-- BRIN (Block Range INdex) for physically-ordered large tables
CREATE INDEX idx_orders_date_brin
ON orders USING brin(order_date) WITH (pages_per_range = 128);

-- BRIN is tiny but very fast for time-ordered data
-- Compare size:
SELECT
  pg_size_pretty(pg_relation_size('orders')) AS table_size,
  pg_size_pretty(pg_relation_size('idx_orders_date_brin')) AS brin_size;
Tested against PostgreSQL 16

Note

BRIN indexes are tiny (just stores min/max per block range). Effective when data is physically ordered (time-series).

Tables referenced