Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.
Что такое индекс по выражению (Expression Index / Functional Index) в PostgreSQL? Какие накладные расходы на операции записи (INSERT/UPDATE) он влечёт и почему планировщик может отказаться от его использования, если типы данных в выражении запроса не совпадают?
Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.
Пример: CREATE INDEX ON users (lower(email)); помогает искать по соответствующему выражению. Функции в индексном выражении должны удовлетворять требованиям неизменяемости PostgreSQL. При INSERT и изменениях, требующих обновления индекса, появляется дополнительная стоимость вычисления и записи; на HOT-обновления действуют свои ограничения. Планировщику нужно сопоставить выражение, оператор, collation и типы. Неявный cast может изменить выражение так, что индекс не подойдёт. Даже совместимый индекс не обязан использоваться: последовательное чтение иногда дешевле.
Источник: www.postgresql.org.