Skip to main content

Що таке «функціональний індекс»?

Функціональний індекс - це індекс, побудований не на вихідному значенні стовпця, а на результаті функції чи виразу, застосованого до цього стовпця.

Він дозволяє прискорити запити, де в WHERE чи ORDER BY використовуються обчислення, замість прямого порівняння поля.

Приклад

Без індексу:

sql
SELECT * FROM users WHERE LOWER(email) = 'test@mail.com';

Якщо звичайний індекс створено за email, він не використовується, бо в запиті бере участь функція LOWER().

Рішення - функціональний індекс:

sql
CREATE INDEX idx_users_lower_email ON users (LOWER(email));

Тепер СУБД зберігає в індексі значення LOWER(email) і може використовувати його для таких запитів.

Приклади інших варіантів

  • Індекс за частиною рядка:

    sql
    CREATE INDEX idx_products_left_code ON products (LEFT(code, 3));
  • Індекс за обчислюваним виразом:

    sql
    CREATE INDEX idx_orders_total ON orders (price * quantity);
  • Індекс за датою без часу:

    sql
    CREATE INDEX idx_logs_date ON logs (DATE(created_at));

Переваги

  • Прискорює запити з функціями, виразами, кастами.
  • Зменшує потребу зберігати зайві «попередньо обчислені» поля.

Обмеження

  • Використовується лише, якщо вираз у запиті збігається точно з виразом в індексі.
  • Збільшує навантаження під час вставки й оновлення (так само, як звичайні індекси).

Підсумок: Функціональний індекс - це «розумний» індекс, який зберігає не самі дані, а результати обчислень над ними, щоб прискорювати запити з функціями й виразами в умовах.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.