Индекс по 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, чтобы запрос стал покрывающим
