Учись программированию на C++ Builder бесплатно!

Индекс в базе данных позволяет обеспечить быстрый доступ к данным, которые хранятся в полях. Чтобы ускорить любую операцию с таблицей необходимо соответствующие поля делать индексными, по которым будет часто осуществляться поиск или отбор записей.

Синтаксис

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] имя ] ON имя_таблицы [ USING метод ]
    ( { имя_столбца | ( выражение ) } [ COLLATE правило_сортировки ] [ класс_операторов ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ WITH ( параметр_хранения [= значение] [, ... ] ) ]
    [ TABLESPACE табл_пространство ]
    [ WHERE предикат ]

Параметры

UNIQUE

Контролирует повторяющиеся значения в таблице БД при создании индекса (если в таблице уже есть данные) и при каждом последующем добавлении данных. Если попытаться вставить или изменить какие-либо данные в таблице и будет нарушена, при этом, уникальность индекса, то операция завершатся с ошибкой.

CONCURRENTLY

Создаёт индекс без установления блокировки, предотвращающие последующее добавление, изменение или удаление данных в таблице базы данных. Для временных таблиц конструкция CREATE INDEX выполняет простой неблокирующий способ. Это связано тем, что они не могут использоваться другими сеансами.

IF NOT EXISTS

Не выводить ошибку, если индекс с таким именем уже существует в таблице. В этом случае будет показано замечание. При указании конструкции IF NOT EXISTS, указывать имя индекса обязательно.

имя

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

имя_таблицы

Имя индексируемой таблицы.

метод

Имя применяемого метода индекса. Метод имеет следующие варианты: btree, hash, gist, spgist, gin и brin. По умолчанию используется метод btree.

имя_столбца

Имя столбца таблицы, в которой будет создаваться индекс.

выражение

Выражение для выполнения операций с одним или несколькими столбцами таблицы.

правило_сортировки

Задаётся имя правила сортировки для индекса, над которым выполняется сортировка. По умолчанию установлено правило сортировки, которое задаётся для индексируемого столбца, или же полученное для результата выражения индекса. Индексы с нестандартными правилами сортировки будут полезны для таких запросов, которые включают выражения с подобными правилами.

класс_операторов

Имя класса операторов.

ASC

Сортирует данные по возрастанию (по умолчанию).

DESC

Сортирует данные по убыванию.

NULLS FIRST

После завершения сортировки значение NULL проставляется перед остальными данными. По умолчанию для сортировки DESC.

NULLS LAST

После завершения сортировки значение NULL проставляется после остальных данных. По умолчанию для сортировки ASC.

параметр_хранения

Имя параметра хранения для индекса.

табл_пространство

Табличное пространство, где будет в дальнейшем создаваться индекс.

предикат

Задаёт определённое ограничение для частичного индекса.

Создание индекса

Для создания индексного поля используется инструкция CREATE INDEX и имеет следующий формат:

CREATE INDEX <Имя индекса> ON <Имя таблицы> (<Имя поля1>, ..., [<Имя поляN>]);

Данной инструкцией можно создать только один индекс, однако, одно индексное поле может входить в состав нескольких индексов. Так же не требуется, чтобы значения индексных полей были уникальными. При сортировке по индексу записи упорядочиваются в порядке возрастания значений индексных полей.

Оператор CREATE INDEX в таблицах dBase позволяет создавать первичные индексы, а в таблицах Paradox – вторичные индексы. Первичный индекс в таблице Paradox это ключ, который непосредственно описывается при создании таблицы. Так, использование оператора создания индекса CREATE INDEX для таблиц dBase является единственным способом.

Примеры

Создаёт индекс по одному полю:

CREATE INDEX indName ON Employee.db (Name)

Создаёт индекс по двум полям:

CREATE INDEX indNamePosition ON Employee.db (Name, Position)

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

Для удаления индекса используется оператор DROP INDEX следующего формата:

DROP INDEX <Имя таблицы>.<Имя индекса>
DROP INDEX <Имя таблицы>.PRIMARY

Во время удаления индекса таблица БД не должна использоваться другими приложениями, иначе будет сгенерировано исключение. Оператор DROP INDEX позволяет удалить один индекс, обозначив его составным именем, которое состоит из имени собственно индекса и таблицы. При удалении первичного индекса (ключ) из таблицы Paradox указывается описатель PRIMARY вместо имени индекса, так как главный ключ не имеет имени.

Примеры

Из таблицы Cubook удаляется индекс indNameArticle, созданный по полям Name и Article:

DROP INDEX "Cubook.db".indNamePost

Удаление первичного ключа:

DROP INDEX "Cubook.db".PRIMARY

При удалении индекса, если он отсутствует в таблице или таблица используется другим приложением, то в процессе выполнения операции генерируется исключение.


Поиск по сайту