Составной индекс не помогает запросу по второй колонке
На таблице событий есть индекс:
CREATE INDEX idx_events_client_created ON events (client_id, created_at);
Отчёт выполняет запрос:
SELECT * FROM events
WHERE created_at >= now() - interval '1 day';
В плане запроса — Seq Scan по всей таблице. Почему индекс не используется?
- Порядок колонок в составном индексе неважен, дело в типе колонки created_at и приведении типов в условии
- Индекс подошёл бы, но планировщик работает по устаревшей статистике — достаточно выполнить ANALYZE на таблице
- В условии нет ограничения по ведущей колонке client_id, а b-tree упорядочен сначала по ней — нужен индекс по created_at
- Индекс заработает, если дописать в запрос ORDER BY client_id — тогда порядок совпадёт с порядком в индексе
