FirebirdSQL logo
 TABLEVIEW 

Ограничения на длину индексируемой строки

Максимальная длина индексируемой строки на 9 байтов меньше, чем максимальная длина ключа.Максимальная длина индексируемой строки зависит от размера страницы и набора символов.

Table 1. Длина индексируемой строки и набор символов

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

Максимальная длина индексируемой строки для набора символов, байт/символ

1

2

3

4

6

4096

1015

507

338

253

169

8192

2039

1019

679

509

339

16384

4087

2043

1362

1021

681

32768

8183

4091

2727

2045

1363

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

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

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.