Инструменты пользователя

Инструменты сайта


Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

create_index



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;

См. также

Только авторизованные участники могут оставлять комментарии.
create_index.txt · Последние изменения: 2013/07/16 01:22 (внешнее изменение)