FirebirdSQL logo
 TABLEVIEW 

Максимальное количество индексов на таблицу

Для каждой таблицы максимально возможное количество индексов ограничено и зависит от размера страницы и количества столбцов в индексе.

Table 1. Число индексов и количество столбцов

Размер страницы

Число индексов в зависимости от количества столбцов в индексе

1

2

3

4096

203

145

113

8192

408

291

227

16384

818

584

454

32768

1637

1169

909

Кто может создать индекс?

Выполнить оператор CREATE INDEX могут:

  • Администраторы

  • Владелец таблицы, для которой создаётся индекс;

  • Пользователи с привилегией ALTER ANY TABLE.

Примеры

Example 1. Создание индекса
CREATE INDEX IDX_UPDATER ON SALARY_HISTORY (UPDATER_ID);
Example 2. Создание индекса с сортировкой ключей по убыванию
CREATE DESCENDING INDEX IDX_CHANGE
ON SALARY_HISTORY (CHANGE_DATE);
Example 3. Создание многосегментного индекса
CREATE INDEX IDX_SALESTAT ON SALES (ORDER_STATUS, PAID);
Example 4. Создание индекса, не допускающего дубликаты значений
CREATE UNIQUE INDEX UNQ_COUNTRY_NAME ON COUNTRY (NAME);
Example 5. Создание вычисляемого индекса
CREATE INDEX IDX_NAME_UPPER ON PERSONS
COMPUTED BY (UPPER (NAME));

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

SELECT *
FROM PERSONS
WHERE UPPER(NAME) STARTING WITH UPPER('Iv');
Example 6. Создание частичного индекса
CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;

Если при выполнении выборки в условии WHERE будет точно такое же выражение, которое было задано в индексе, индекс будет использован, в противном случае нет.

SELECT * FROM T1 WHERE COL < 100;

-- PLAN (T1 INDEX (IT1_COL))

В следующем примере создаётся индекс, в который не будут включены значения NULL.

CREATE INDEX IT1_COL2 ON T1 (COL) WHERE COL IS NOT NULL;

Этот индекс может использоваться почти любыми предикатами поиска за исключением IS NULL и IS NOT DISTINCT FROM, поскольку другие выражение игнорируют NULL.

SELECT * FROM T1 WHERE COL > 100;

-- PLAN (T1 INDEX IT1_COL2)

Частичный индекс можно создать по нескольким значениям столбца, для этого их надо перечислить в IN или объединить несколько выражений оператором OR.

CREATE INDEX IT1_COL3 ON T1 (COL) WHERE COL = 1 OR COL = 2;
SELECT * FROM T1 WHERE COL = 2;

-- PLAN (T1 INDEX IT1_COL3)
См. также:

ALTER INDEX, DROP INDEX.

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 невозможно.