Индексы
Функциональные индексы
В слегка измененном виде команда 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