====== 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; ===== См. также ===== [[INDEX]], [[DROP INDEX]], [[ALTER INDEX]]