CREATE INDEX
Создает индекс для таблицы.
Синтаксис:
CREATE [ UNIQUE ] INDEX индекс ON таблица [ USING тип ] (поле [ класс ] [,…]) CREATE [ UNIQUE ] INDEX индекс ON таблица [ USING тип ] (функция (поле [….])[ класс ])
Параметры:
- UNIQUE. Необязательное ключевое слово UNIQUE. При его присутствии база данных автоматически проверяет наличие повторяющихся значений в поле (или группе полей), для которых создается индекс. Проверка происходит как при создании индекса, так и при каждом включении данных в таблицу. В дальнейшем PostgreSQL выдает ошибку при выполнении команд INSERT или UPDATE, в результате которых в индексе появляются повторяющиеся значения и команда завершается неудачей.
 - индекс. Имя создаваемого индекса.
 - таблица. Имя таблицы, в которой создается индекс.
 - тип. Алгоритм, используемый при построении индекса. Допустимы три значения:
- btree – реализация на базе В-деревьев Лемана-Яо с высокой степенью параллельности;
 - rtree – реализация па базе стандартных R-деревьев с использованием квадратичного разбиения по алгоритму Гуттмана;
 - hash – реализация на базе алгоритмов линейного хэширования.
 
 - поле. Поле (или разделенный запятыми список полей), по которому строится индекс.
 - класс. Необязательный операторный класс. Для большинства пользователей этот параметр не важен.
 - функция. Имя функции, вызываемой для заданных полей (вместо прямого индексирования данных). Указанная функция должна возвращать отдельное значение (не группу значений!), по которому и строится индекс.
 
Результаты:
- CREATE. Сообщение возвращается при успешном создании индекса.
 - ERROR: Cannot create Index: 'индекс' already exists. Ошибка– индекс с указанным именем уже существует.
 - ERROR: DefineIndex: attribute "поле" not found. Ошибка – заданное поле не существует в индексируемой таблице.
 - ERROR: DefineIndex: relation "таблица" not found. Ошибка – заданная таблица не существует в подключенной базе данных.
 
Описание
Команда CREATE INDEX строит оптимизирующий индекс по значениям одного или нескольких полей заданной таблицы. Следует помнить, что индексы предназначены для повышения эффективности и быстродействия операций с базами данных, однако в некоторых таблицах затраты на сопровождение индекса перевешивают выгоду от его использования. В этом случае индекс снижает общее быстродействие.
Построение индексов по полям
При создании "традиционного" индекса указывается список из одного или нескольких полей таблицы. Эта разновидность индексов используется запросами, напрямую работающими с индексируемыми полями в секции WHERE. Учтите, что индексы типов rtree и hash индексируют только одно поле, а индекс типа btree позволяет индексировать до 16 полей.
