Що таке «функціональний індекс»?
Функціональний індекс - це індекс, побудований не на вихідному значенні стовпця, а на результаті функції чи виразу, застосованого до цього стовпця.
Він дозволяє прискорити запити, де в WHERE чи ORDER BY використовуються обчислення,
замість прямого порівняння поля.
Приклад
Без індексу:
SELECT * FROM users WHERE LOWER(email) = 'test@mail.com';Якщо звичайний індекс створено за email, він не використовується,
бо в запиті бере участь функція LOWER().
Рішення - функціональний індекс:
CREATE INDEX idx_users_lower_email
ON users (LOWER(email));Тепер СУБД зберігає в індексі значення LOWER(email)
і може використовувати його для таких запитів.
Приклади інших варіантів
-
Індекс за частиною рядка:
sqlCREATE INDEX idx_products_left_code ON products (LEFT(code, 3)); -
Індекс за обчислюваним виразом:
sqlCREATE INDEX idx_orders_total ON orders (price * quantity); -
Індекс за датою без часу:
sqlCREATE INDEX idx_logs_date ON logs (DATE(created_at));
Переваги
- Прискорює запити з функціями, виразами, кастами.
- Зменшує потребу зберігати зайві «попередньо обчислені» поля.
Обмеження
- Використовується лише, якщо вираз у запиті збігається точно з виразом в індексі.
- Збільшує навантаження під час вставки й оновлення (так само, як звичайні індекси).
Підсумок: Функціональний індекс - це «розумний» індекс, який зберігає не самі дані, а результати обчислень над ними, щоб прискорювати запити з функціями й виразами в умовах.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.