Что такое индекс по выражению (Expression Index / Functional Index) в PostgreSQL? Какие накладные расходы на операции записи (INSERT/UPDATE) он влечёт и почему планировщик может отказаться от его использования, если типы данных в выражении запроса не совпадают?

Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.

Короткий ответ

Что ответить на собеседовании

Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.

Подробный разбор

Ответ с пояснениями

Индекс по выражению хранит вычисленный ключ, например lower(email). Он ускоряет подходящие запросы, но требует вычисления и поддержки индексных записей при изменении данных.

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

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее