Функциональные индексы
(продолжение предыдущего поста)
Что такое функциональный индекс?
* Обычный индекс говорит: «Я помогу тебе быстрее найти эту колонку».
* Функциональный индекс говорит: «Я помогу тебе быстрее найти результат этой функции».
Пример:
-- Обычный фильтр (медленно)
WHERE EXTRACT(YEAR FROM order_date) = 2023;
-- С функциональным индексом
CREATE INDEX idx_order_year ON orders ((EXTRACT(YEAR FROM order_date)));
Теперь функция YEAR() не вычисляется для каждой строки.
Система просто ищет значение, как в словаре.
Почему это важно?
Вы постоянно используете такие запросы:
* LOWER(email) → поиск без учёта регистра
* SUBSTRING(code, 1, 4) → частичное совпадение
* price * quantity → вычисляемые столбцы
* EXTRACT(MONTH FROM signup_date) → фильтрация по месяцу
Угадайте что? Все они работают медленно без функционального индекса.
Когда следует использовать?
* Вы применяете фильтры к вычисляемым значениям
* Выполняете операции с датами, строками или вычислениями в столбцах
* Ваше приложение ориентировано на чтение данных
* Вы хотите, чтобы запросы выполнялись менее чем за 100 мс
Важно запомнить:
1. Функциональные индексы хранят результат функции
2. Они избегают повторного вычисления при каждом запросе
3. Делают медленные фильтры молниеносными
4. Но... они занимают место на диске и работают только с детерминированными функциями
Сохраняйте спокойствие и изучайте SQL!
Post #2228
1.6K