Иллюстрированный самоучитель по PostgreSQL

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
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.