FirebirdSQL logo

ALTER INDEX

Назначение

Перевод индекса в активное/неактивное состояние, перестройка индекса.

Доступно в

DSQL, ESQL.

Синтаксис
ALTER INDEX indexname {ACTIVE | INACTIVE};
Table 1. Параметры оператора ALTER INDEX
Параметр Описание

indexname

Имя индекса.

Оператор ALTER INDEX переводит индекс в активное/неактивное состояние.Возможность изменения структуры и порядка сортировки ключей этот оператор не предусматривает.

INACTIVE

При выборе опции INACTIVE, индекс переводится из активного в неактивное состояние. Перевод индекса в неактивное состояние по своему действию похоже на команду DROP INDEX за исключением того, что определение индекса сохраняется в базе данных. Невозможно перевести в неактивное состояние индекс участвующий в ограничении.

Активный индекс может быть отключен, только если отсутствуют запросы использующие этот индекс, иначе будет возвращена ошибка “object in use”.

Активация неактивного индекс также безопасна.Тем не менее, если есть активные транзакции, модифицирующие таблицу, то транзакция, содержащая оператор ALTER INDEX потерпит неудачу, если она имеет атрибут NO WAIT.Если транзакция находится в режиме WAIT, то она будет ждать завершения параллельных транзакций.

С другой стороны, если наш оператор ALTER INDEX начинает перестраивать индекс на COMMIT, то другие транзакции, изменяющие эту таблицу, потерпят неудачу или будут ожидать в соответствии с их WAIT/NO WAIT атрибутами.Та же самая ситуация будет и при выполнении CREATE INDEX.

Tip

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

ACTIVE

При выборе альтернативы ACTIVE индекс переводится из неактивного состояния в активное. При переводе индекса из неактивного состояния в активное — индекс перестраивается.

Tip

Даже если индекс находится в активном состоянии оператор ALTER INDEX …​ ACTIVE всё равно перестраивает индекс.Таким образом, эту команду можно использовать как часть обслуживания БД для перестройки индексов, автоматически созданных для ограниченийPRIMARY KEY, FOREIGN KEY, UNIQUE, для которых выполнение оператора ALTER INDEX …​ INACTIVE невозможно.

Использование ALTER INDEX для индексов ограничений

Принудительный перевод индексов созданных для ограничений PRIMARY KEY, FOREIGN KEY и UNIQUE не допускается.Тем не менее выполнение оператора ALTER INDEX …​ INACTIVE работает так же хорошо для индексов ограничений, как и другие инструменты для других индексов.