Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / LCD / Хранение БД.doc
Скачиваний:
42
Добавлен:
16.04.2013
Размер:
173.06 Кб
Скачать

Использование maxvalue

Обратите внимание на описание в предыдущем примере раздела P5. В нем хранятся все строки, которые содержат значения, превышающие те, что установлены верхней границей предшествующего раздела, P4. К примеру, при вводе нового клиента, живущего в Вайоминге (WY-Wyoming), новая строка размещается в разделе P5, который физически хранится в файле данных табличной областиDATA05. Если бы в таблицеUSA_CUSTOMERSне было раздела с верхней границейMAXVALUE, то приложение не смогло бы занести в эту таблицу клиентов, которые проживают в штатах, обозначенных какSC,SD,TN,TX,UT,VA,VT,WA,WI,WVиWY.

Примечание.Если некоторые значения строк в ключе разделов таблицы являются null-значениями, тоOracleсчитает эти null-значения большими, чем все остальные, за исключениемMAXVALUE.

Разделенные индексы

Для некластеризованных таблиц в Oracle8 поддерживается разделение индексов по диапазону. Как и в таблицах, каждый раздел индекса имеет те же самые логические атрибуты (столбцы индекса), но может иметь разные физические характеристики (размещение табличных областей и параметры хранения). Ключ разделов индекса устанавливает, в каком разделе хранятся индексные элементы. Он должен состоять из одного или нескольких столбцов, определяющих этот индекс. Как показано в следующем примере, описание диапазонов разделов индекса аналогично описанию разделов таблицы:

CREATE INDEX usa_customers_state

ON usa_customers (state)

PARTITION BY RANGE (state)

(PARTITION p1 VALUES LESS THAN ('H')

-- AL, AK, AZ, AR, CA, CO, CT, DC, DE, FL, GA

TABLESPACE data01,

PARTITION p2 VALUES LESS THAN ('MI')

-- HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME

TABLESPACE data02,

PARTITION p3 VALUES LESS THAN ('NM')

-- MI, MN, MS, MO, MT, NC, ND, NE, NH, NJ

TABLESPACE data03,

PARTITION p4 VALUES LESS THAN ('S')

-- NM, NV, NY, OH, OK, OR, PA, PR, RI

TABLESPACE data04,

PARTITION p5 VALUES LESS THAN (MAXVALUE)

-- SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY

TABLESPACE data05 );

Варианты создания разделенных индексов

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

Начнем с первого вопроса. Разделять индекс разделенной таблицы имеет смысл только в том случае, когда сам он достаточно велик для того, чтобы быть разделенным. Ключевые столбцы для разделенных индексов выбираются так же, как и для неразделенных: индексируются те столбцы таблиц, которые используются в критериях выбора условий SQL-операторов.

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

Равноразделенные объекты

Два или более объектов базы данных являются равноразделенными (equi-partitioned), если они имеют одинаковые логические атрибуты раз­деления. ТаблицаUSA_CUSTOMERSи индексUSA_CUSTOMERS_STATE, рассмотренные выше, являются равноразделенными, так как имеют одинаковое число разделов, одинаковые диапазоны данных для каждого раздела и одинаковые столбцы, определяющие их ключи разделов.

В ряде случаев равноразделенные объекты могут быть полезны. Рассмотрим три ситуации:

  • Можно сделать равноразделенными основную таблицу и соответ­ствующую детальную таблицу. В результате соединение этих двух таблиц будет выполняться очень быстро, так как все строки, удовлетворяющие соответствию "основа-деталь", будут находиться в одном и том же разделе данных. При этом уменьшается число обращений к диску, что напоминает ситуацию, когда основная и детальная таблицы "заранее соединяются" с помощью кластеров данных.

  • Можно сделать равноразделенными таблицу и её индекс, являющий­ся первичным ключом. Когда в результате выполнения администра­тивной операции над каким-либо разделом таблицы он становится недоступен, прекращается доступ только к соответствующему разделу индекса. Если бы таблица и её индекс не были равнораз­деленными, в результате выполнения такой операции стали бы недоступными, скорее всего, два или более разделов индекса.

  • Можно сделать равноразделенными таблицу и её индекс, когда известно, что операция, выполняемая над определенным разделом таблицы, будет воздействовать только на соответствующий раздел индекса. Например, если при выполнении загрузки в таблицу массивов данных информация обновляется только в одном разделе таблицы, то перестраивать придется только соответствующий раздел индекса.

Когда таблица и её индекс создаются равноразделенными, все ключи в конкретном разделе индекса ссылаются только на строки соответствую­щего раздела таблицы; таким образом, разделенный индекс, который равноразделен со своей таблицей, является локальным разделенным индексом (local partitioned index).Oracleможет использовать разделы локальных индексов для генерирования превосходных планов запросов. Кроме того, при выполнении операции, управляющей разделом таблицы, администратор будет воздействовать только на один раздел индекса.

Примечание.Создать равноразделенный со своей таблицей индекс можно проще, чем показано в предыдущем примере. Создадим локальный равноразделенный индекс для той же таблицыUSA_CUSTOMERS:

CREATEINDEXusa_customers_state

ON usa_customers (state)

LOCAL

(PARTITION p1 TABLESPACE data01,

PARTITION p2 TABLESPACE data02,

PARTITION p3 TABLESPACE data03,

PARTITION p4 TABLESPACE data04,

PARTITION p5 TABLESPACE data05);

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