Вступить в клуб →
сложнаявопросSQL и модель данных

Индекс по дате создан, но отчёт по дню по-прежнему сканирует всю таблицу

В таблице orders около 12 млн строк. По полю created_at создан btree-индекс. Отчёт за конкретный день использует запрос:

SELECT COUNT(*) FROM orders
WHERE date(created_at) = '2026-03-01';

План выполнения показывает полное сканирование таблицы — индекс не используется. Почему так происходит?

  • Индекс не успел построиться после массовой загрузки: нужно пересоздать его и обновить статистику планировщика
  • На таблицах больше 10 млн строк обычный btree-индекс неэффективен, требуется партиционирование по дате
  • Условие наложено на функцию от поля, а индекс построен по самому полю: нужен диапазон либо индекс по выражению
  • COUNT(*) всегда читает таблицу целиком, индексы для подсчёта строк не применяются ни при каких условиях

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

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

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

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