Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Oracle CREATE ALTER INDEX(продолжение 4)

Платформа Oracle не поддерживает индексирование столбцов со следующими ишами данных: LONG, LONG RAW, REF (с атрибутом SCOPE) и пользовательские типы данных. Вы можете создавать индексы для функций и выражений, но не допускаются значения NULL или агрегатные функции. Если вы создаете индекс по функции, эта функция, если у нее нет параметров, должна иметь в качестве парамемров пустой набор данных, например function пате(). Если функция является пользовательской, она должна иметь предложение DETERMINISTIC.

Платформа Oracle поддерживает специальную индексную структуру, называемую иидскс-пиючицей (index-organized table, ЮТ). Индекс-таблицы объединяют табличные данные и индексы по первичному ключу и одной физической структуре, вместо отдельных структур для таблицы и индекса Индекс-таблицы создаются при помощи инструкции CREATE TABLE…ORGANIZATIONINDEX. За более подробной информацией по созданию индекс-таблиц обращайтесь к разделу «Инструкция CREATE/ALTER TABLK».

Платформа Oracle автоматически создает любые дополнительные индексы для индекс-таблиц в форме вторичных индексов. Вторичные индексы не поддерживают 11 предложение REVERSE.

Платформа Oracle позволяет создавать секционированные индексы и таблицы с помощью предложения PARTITION. Следовательно, индексы Oracle также поддерживают секционированные таблицы. При указании предложения LOCAL платформа создает отдельные индексы для каждой секции таблицы. При указании предложения GLOBAL платформа создает общий индекс для всех разделов.

Отметьте, что в схеме синтаксиса при каждой ссылке на имя объекта вы при желании можете указать схему. Это применимо к индексам, таблицам и тому подобное, но не применимо к табличным пространствам. Если вы хотите создать индекс в схеме, отличной от текущей, вы должны иметь явно указанную привилегию.

Например, с помощью инструкции, приведенной ниже, вы можете создать в Oracle индекс, который является сжатым, создается параллельно и со сбором статистики, но без записи создания в журнал.

CREATE UNIQUE INDEX unq_pub_id ON publishers (pub_name, country) COMPRESS 1 PARALLEL NOLOGGING COMPUTE STATISTICS;

Как и в других инструкциях, связанных с созданием объектов, вы можете контролировать занимаемое объектами место и инкременты их роста. В следующем примере в Oracle создается индекс в указанном табличном пространстве с определенными параметрами хранения данных.

CREATE UNIQUE INDEX unq_pub_id ON publishers(pub_name, country) STORAGE (INITIAL 10M NEXT 5M PCTINCREASE 0) TABLESPACE publishers;

Например, если вы создаете секционированную таблицу housing_construction на сервере Oracle, вы также должны создать секционированный индекс, имеющий свои собственные разделы.

CREATE UNIQUE CLUSTERED INDEX project_id_ind ON housing_const ruction (projected) GLOBAL

PARTITION BY RANGE (projected) (PARTITION parti VALUES LESS THAN (‘H-) TABLESPACE

construction_part1_rtdx_ts, PARTITION part2 VALUES LESS THAN (‘P’)

TABLESPACE construction_part2_ndx_ts, PARTITION part3 VALUES LESS THAN (MAXVALUE) TABLESPACE construction_part3_ndx_ts);

Если же таблица housing_construction использует составное секционирование, нужно будет учесть и это.

CREATE UNIQUE CLUSTERED INDEX project_id_ind ON housing_construction(project_id)
STORAGE(INITIAL 10M MAXEXTENTS UNLIMITED) LOCAL
(PARTITION parti TABLESPACE construction_part1_ndx_ts,
PARTITION part2 TABLESPACE construction_part2_ndx_ts
(SUBPARTITION subpartIO,
SUBPARTITION subpart20,
SUBPARTITION subpart30,
SUBPARTITION subparts,
SUBPARTITION subpart50,
SUBPARTITION subpart60),
PARTITION part3 TABLESPACE construction_part3_ndx_ts);

В следующем примере нам нужно перестроить созданный ранее индекс project_id_ind с использованием параллельных процессов сканирования старого индекса и построения нового индекса в обратном порядке.

ALTER INDEX project_id_.ind REBUILD REVERSE PARALLEL

Точно так же мы можем разделить секцию индекса project_id_ind и получить новую секцию.

ALTER INDEX project_id_ind SPLIT PARTITION part3 AT (‘S’)

INTO (PARTITION part3_a TABLESPACE constr_p3_a LOGGING, PARTITION part3_b TABLESPACE constr_p3_b);

Источник