CREATE INDEX
Функциональный индекс
К другой категории относятся функциональные индексы. Функциональный индекс строится по возвращаемому значению функции, примененной к одному пли нескольким полям. Такие индексы обычно используются запросами, часто вызывающими одну и ту же функцию в секции WHERE.
Например, если в секции WHERE некоторого запроса часто вызывается функция upper(last_name), этот запрос можно оптимизировать построением функционального индекса по результату функции upper(last_name).
Операторы и операторные классы
Оптимизатор запросов PostgreSQL при сравнении использует разные индексы для разных операторов. Тип индекса выбирается по списку, приведенному в табл. 14.1.
Таблица 14.1. Соответствие "оператор-индекс".
Индекс | Оператор |
---|---|
В-дерево | <, <=, >=, > |
R-дерево | <<, &<, &>, >>, @, – , && |
Хэш | = |
Для каждого индексируемого поля можно задать операторный класс, который должен использоваться при индексации. Данная возможность существует только потому, что в некоторых обстоятельствах имеется несколько вариантов осмысленного упорядочения данных. Впрочем, типа индексации, принятого по умолчанию, обычно бывает достаточно, если только вы не занимаетесь разработкой собственных нестандартных типов и операторов.
Примеры
Следующая команда строит уникальный индекс по полю Id таблицы employees:
booktown=# CREATE UNIQUE INDEX employee_id_idx booktown-# ON employees (id); CREATE
В другом фрагменте по полю last_name таблицы employees строится функциональный индекс с использованием функции upper():
booktown=# CREATE INDEX employee_upper_name_idx booktown-# ON employees (upper(last_name)); CREATE