FirebirdSQL logo

Индекс — это объект базы данных, используемый для более быстрого извлечения данных из таблицы или для ускорения сортировки в запросе.Кроме того, индексы используются для обеспечения ограничений целостности — PRIMARY KEY, FOREIGN KEY, UNIQUE.

В данном разделе описываются вопросы создания индексов, перевода их в активное/неактивное состояние, удаление индексов и сбор статистики (пересчёт селективности) для индексов.

CREATE INDEX

Назначение

Создание индекса для таблицы.

Доступно в

DSQL, ESQL.

CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]
INDEX indexname ON tablename
{(<column_list>) | COMPUTED [BY] (<value_expression>)}
[WHERE <search_condition>]

<column_list> ::= col [, col ...]
Table 1. Параметры оператора CREATE INDEX
Параметр Описание

indexname

Имя индекса.Может содержать до 63 символов.

tablename

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

col

Столбец таблицы.В качестве столбцов не могут быть использованы поля типа BLOB, ARRAY и вычисляемые поля.

value_expression

Выражение, содержащее столбцы таблицы. Значение этого выражения будут ключами индекса.

search_condition

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

Оператор CREATE INDEX создаёт индекс для таблицы, который может быть использован для ускорения поиска, сортировки и/или группирования.Кроме того, индекс может быть использован при определении ограничений, таких как первичный ключ, внешний ключ или ограничениях уникальности.Индекс может быть построен на столбцах любого типа кроме BLOB и массивов.Имя индекса должно быть уникальным среди всех имён индексов.

Note
Индексы в ключах

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

ALTER TABLE COUNTRY
ADD CONSTRAINT PK_COUNTRY PRIMARY KEY (ID);

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

Если при создании индекса указано ключевое слово UNIQUE, то индекс гарантирует уникальность значений ключей.Такой индекс называется уникальным.Уникальный индекс не является ограничением уникальности.

Уникальные индексы не могут содержать дубликаты значений ключей (или дубликаты комбинаций значений ключей в случае составного, многоколоночного или многосегментного индекса). Дубликаты значения NULL допускаются в соответствии со стандартом SQL-99, в том числе и в многосегментном индексе.

Направление индекса

Все индексы в Firebird являются однонаправленными.Индекс может быть построен в восходящем и нисходящем порядке.Ключевые слова ASC[ENDING] (сокращённо ASC) и DESC[ENDING] используются для указания направленности индекса.По умолчанию создаётся восходящий ASC[ENDING] индекс.Допускается одновременное определение восходящего и нисходящего индекса на одном и том же столбце или наборе ключей.

Tip

Убывающий (DESC[ENDING]) индекс может быть полезен при поиске наивысших значений (максимум, последнее и т.д.)