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

Индекс по created_at есть, но запрос читает всю таблицу

PostgreSQL, таблица orders на 40 млн строк.

CREATE INDEX idx_orders_created_at ON orders (created_at);

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

В плане выполнения — последовательное чтение всей таблицы, запрос идёт больше минуты. Что происходит и как это чинить?

  • Индекс не успел построиться; нужно выполнить ANALYZE и повторить запрос
  • Индекс по времени бесполезен для фильтра по дню, здесь помогает только партиционирование таблицы
  • COUNT(*) всегда читает таблицу целиком, индексы на такой запрос не влияют
  • Функция над столбцом делает обычный индекс неприменимым — нужен диапазон по created_at

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

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

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

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