Ты создал идеальный индекс по дате, но запрос всё равно работает целую вечность. Причина кроется всего в одной функции.
⚙️ Почему база игнорирует индекс
🔹 Как только ты пишешь
WHERE YEAR(order_date) = 2023, база перестаёт видеть исходные значения дат.🔹 Она не может искать по индексу (как по алфавитному указателю в книге), потому что ей нужно сначала вычислить год для каждой строки таблицы.
🔹 Итог — долгое полное сканирование (Seq Scan), даже если нужных строк всего пара штук.
🚀 Как починить (правило SARG)
Чтобы индекс сработал, колонка должна оставаться «чистой» — без математики и функций. Перенеси все условия в правую часть от знака равенства.
🔸 Плохо: индекс сломается
SELECT * FROM orders
WHERE YEAR(order_date) = 2023;
🔸 Хорошо: моментальный поиск
SELECT * FROM orders
WHERE order_date >= '2023-01-01' AND order_date < '2024-01-01';
💡 Оставляй проиндексированную колонку в одиночестве слева от условия, и база ответит моментально.


