Вступить в клуб →
лёгкаявопросSQL и оптимизация запросов

Индекс по created_at есть, но фильтр по дате его не использует

На таблице orders есть индекс по created_at. Запрос выбирает заказы за один день и работает секунды:

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

Почему индекс не помогает и как переписать запрос?

  • Функция применена к колонке, поэтому индекс по ней не подходит; нужен диапазон: created_at >= '2026-03-01' AND created_at < '2026-03-02'
  • Индекс не работает со сравнением строки и даты; нужно привести константу: DATE(created_at) = DATE('2026-03-01')
  • Индексы по колонкам типа datetime не используются для равенства, только для сортировки
  • Нужно добавить второй индекс — по выражению SELECT id, чтобы запрос стал покрывающим

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

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

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

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