![]() |
![]() |
![]() |
CREATE INDEX Создает индекс для таблицы. Синтаксис CREATE [ UNIQUE ] INDEX индекс ON таблица [ USING тип ] ( поле [ класс ] [, ...] ) CREATE [ UNIQUE ] INDEX индекс ON таблица [ USING тип ] ( функция ( поле [....])[ класс ] ) Параметры
Результаты
Описание Команда CREATE INDEX строит оптимизирующий индекс по значениям одного или нескольких полей заданной таблицы. Следует помнить, что индексы предназначены для повышения эффективности и быстродействия операций с базами данных, однако в некоторых таблицах затраты на сопровождение индекса перевешивают выгоду от его использования. В этом случае индекс снижает общее быстродействие. Построение индексов по полям При создании «традиционного» индекса указывается список из одного или нескольких полей таблицы. Эта разновидность индексов используется запросами, напрямую работающими с индексируемыми полями в секции WHERE. Учтите, что индексы типов rtree и hash индексируют только одно поле, а индекс типа btree позволяет индексировать до 16 полей. Функциональный индекс К другой категории относятся функциональные индексы. Функциональный индекс строится по возвращаемому значению функции, примененной к одному пли нескольким полям. Такие индексы обычно используются запросами, часто вызывающими одну и ту же функцию в секции WHERE. Например, если в секции WHERE некоторого запроса часто вызывается функция upper(last_name), этот запрос можно оптимизировать построением функционального индекса по результату функции upper(last_name). Операторы и операторные классы Оптимизатор запросов PostgreSQL при сравнении использует разные индексы для разных операторов. Тип индекса выбирается по списку, приведенному в табл. 14.1. Таблица 14.1. Соответствие «оператор-индекс»
Для каждого индексируемого поля можно задать операторный класс, который должен использоваться при индексации. Данная возможность существует только потому, что в некоторых обстоятельствах имеется несколько вариантов осмысленного упорядочения данных. Впрочем, типа индексации, принятого по умолчанию, обычно бывает достаточно, если только вы не занимаетесь разработкой собственных нестандартных типов и операторов. Примеры Следующая команда строит уникальный индекс по полю 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 |
![]() |
![]() |
![]() |