Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке «функціональний індекс»?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Функціональний індекс** - це індекс, побудований **не на вихідному значенні стовпця**, а на **результаті функції чи виразу**, застосованого до цього стовпця, наприклад `CREATE INDEX idx_users_lower_email ON users (LOWER(email))`; він прискорює запити, де в `WHERE` чи `ORDER BY` використовуються обчислення замість прямого порівняння поля. **Ключове:** такий індекс використовується, лише якщо **вираз у запиті збігається точно** з виразом в індексі; звичайний індекс за `email` не спрацює для `WHERE LOWER(email) = ...`, потрібен саме функціональний індекс за `LOWER(email)`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Функціональний індекс** - це індекс, побудований **не на вихідному значенні стовпця**, а на **результаті функції чи виразу**, застосованого до цього стовпця. Він дозволяє прискорити запити, де в `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)); ``` ### Переваги - Прискорює запити з функціями, виразами, кастами. - Зменшує потребу зберігати зайві «попередньо обчислені» поля. ### Обмеження - Використовується лише, якщо **вираз у запиті збігається точно** з виразом в індексі. - Збільшує навантаження під час вставки й оновлення (так само, як звичайні індекси). **Підсумок:** Функціональний індекс - це «розумний» індекс, який зберігає не самі дані, а **результати обчислень** над ними, щоб прискорювати запити з функціями й виразами в умовах.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.