Содержание
CREATE INDEX
Версии сервера
0.9 | 1.0 | 1.5.3 | 1.5.4 | 1.5.5 | 2.0 | 2.0.3 | 2.0.4 | 2.1 | 2.5 | 3.0 |
---|---|---|---|---|---|---|---|---|---|---|
+ | + | + | + | + | + | + | + | + | + | + |
Формат
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX <имя индекса> ON <таблица> { (<столбец> [, <столбец> ...]) | COMPUTED BY (выражение) };
Описание
Индекс создается для одной конкретной таблицы. Имя индекса должно быть уникальным среди имен всех индексов базы данных. Индекс может быть уникальным (ключевое слово UNIQUE). Это означает, что в индексе не может быть двух разных строк с одинаковыми значениями столбцов. Столбцы, входящие в состав уникального индекса, не могут также иметь пустого значения NULL. Ключевое слово ASCENDING (сокращенно ASC) означает, что записи индекса упорядочиваются по возрастанию значений столбцов, входящих в состав индекса. Этот вариант по умолчанию. Ключевое слово DESCENDING (сокращение DESC) указывает, что записи индекса упорядочиваются по уменьшению значений столбцов индекса. В состав индекса не могут входить столбцы, имеющие тип данных BLOB, а также столбцы любого типа данных, являющиеся массивами. Для одной таблицы можно создать не более 256 индексов.
Примеры
Если для таблицы PEOPLE требуются и возрастающий, и убывающий индексы по столбцу, хранящему фамилии людей LAST_NAME, то нужно создать два индекса, выполнив следующие операторы:
CREATE ASCENDING INDEX IDX_ASC_PEOPLE ON PEOPLE (LAST_NAME); CREATE DESCENDING INDEX IDX_DESC_PEOPLE ON PEOPLE (LAST_NAME);
Вместо одного или нескольких полей в индексе можно использовать выражение. Выражение будет проиндексировано в запросах, если оно находится в предложении WHERE, ORDER BY или GROUP BY. Индексирование нескольких выражений не поддерживается:
CREATE INDEX IDX_UPNAME ON PERSONS COMPUTED BY (UPPER(NAME)); COMMIT; -- следующие запросы будут использовать этот индекс idx_upname: SELECT * FROM PERSONS ORDER BY UPPER(NAME); SELECT * FROM PERSONS WHERE UPPER(NAME) STARTING WITH 'ВЛАД'; DELETE FROM PERSONS WHERE UPPER(NAME) = 'БОГДАН'; DELETE FROM PERSONS WHERE UPPER(NAME) = 'БОГДАН' AND AGE > 65;
CREATE DESCENDING INDEX IDX_DESC_EVENTS_YT ON MYEVENTS COMPUTED BY (EXTRACT(YEAR FROM STARTDATE) || TOWN); COMMIT; -- следующий запрос будет использовать этот индекс idx_desc_events_yt: SELECT * FROM MYEVENTS ORDER BY EXTRACT(YEAR FROM STARTDATE) || TOWN DESC;
Обсуждение