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

Индексы

Функциональные индексы

В слегка измененном виде команда CREATE INDEX позволяет индексировать данные не по значениям поля, а по некоторой функции этих значений. Такая форма индекса называется функциональной.

Команда создания функционального индекса имеет следующий синтаксис:

CREATE [ UNIQUE ] INDEX индекс ON таблица
[ USING тип ] (функция (поле [….])[ класс ])

Единственное отличие этой команды от описанной выше заключается в том, что индекс строится по результатам применения функции к каждому значению поля. Остальные элементы те же.

Функциональные индексы часто строятся для полей, значения которых проходят предварительную обработку перед сравнением в команде SQL. Например, при сравнении строковых данных без учета регистра символов часто используется функция upper (). Создание функционального индекса с функцией upper () улучшает эффективность таких сравнений.

В листинге 7.5 приведен пример построения индекса upper_title для таблицы books. Данные индексируются по результатам применения функции upper () к полю title. Затем выполняется запрос SQL, который благодаря наличию функционального индекса выполняется более эффективно.

Листинг 7.5. Построение функционального индекса.

booktown=# CREATE INDEX upperjtitlejdx ON books
booktown-f (upper(title));
CREATE
booktown=# SELECT title FROM books WHERE upper(title) = 'DUNE';
title
Dune
(1 row)

Удаление индекса

Для удаления индексов из таблицы используется команда DROP INDEX. Синтаксис команды DROP INDEX:

DROP INDEX индекс [….]

В качестве параметра команде передается имя удаляемого индекса. Допускается одновременное удаление нескольких индексов, перечисленных через запятую. В листинге 7.6 удаляется индекс upper_title_idx, созданный в листинге 7.5.

Листинг 7.6. Удаление индекса.

booktown=# DROP INDEX upper_title_idx:
DROP
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.