Вступить в клуб →
средняявопросPostgreSQL, ORM и оптимизация запросов

Составной индекс (company_id, created_at) не помогает фильтру только по дате

На таблице заявок есть индекс:

CREATE INDEX applications_company_created_idx ON applications (company_id, created_at);

Отчёт по всем компаниям выполняет запрос:

SELECT id FROM applications WHERE created_at >= '2026-01-01';

Запрос идёт по всей таблице. Почему существующий индекс не спасает?

  • Составной индекс применим только при равенстве по обеим колонкам, диапазон он не поддерживает
  • Порядок колонок в составном индексе не важен, причина — в типе данных временной метки
  • Нужно переставить условия в WHERE: база выбирает индекс по порядку условий в запросе
  • Индекс работает от левого префикса: без условия по company_id он для этого фильтра бесполезен

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела