Локальные индексы
Локальный индекс берет критерий секционирования из соответствующей таблицы. В нем столько же разделов, подразделов и границ, сколько и в таблице. Когда разделы в таблице добавляются, удаляются, разделяются или сливаются, соответствующим образом модифицируются и разделы индекса. Существует два типа локальных секционированных индексов:
• с префиксом (Prefixed);
• без префикса (Non-prefixed).
Если ключ секционирования индекса оказывается ведущим префиксом (leading prefix) индекса, индекс называется индексом с префиксом, в противном случае его называют индексом без префикса.
Локальные индексы с префиксом
В нашем примере таблица покупок секционируется по ключу времени
для этой таблицы приводится локальный индекс с префиксом, purchase_time_index. Ключом секционирования является ключ времени (timejcey), а столбцами индекса являются ключ времени и идентификатор покупателя (timejcey, customer_id). Ключ секционирования, timejcey, является префиксом ключа индекса. Следующий код SQL создает такой индекс. Схема секционирования локального индекса та же, что и для таблицы, но вы можете задать имена разделов, а также табличных пространств, в которых располагается каждый раздел.
CREATE INDEX easydw.purchase_time_index ON purchases (time_key„ customer_id)
local
(partition indexJan2002 tablespace purchases_jan2002_idx, partition indexFeb2002 tablespace purchases_feb2002_idx, partition indexMar2002 tablespace purchases_mar2002_idx ) ;
При таком индексе, если мы захотим узнать, какие покупки сделал конкретный •покупательв январе, нам нужно будет только поискать в разделе indexJan2002.
Локальныеиндексыбезпрефикса
Локальные индексы, в которые не входит в качестве ведущего столбца индекса ключ секционирования, называются локальными индексами без префикса. Такие индексы полезны, если мы хотим провести секционирование по одному столбцу для удобства обслуживания, а для извлечения данных проиндексировать другие столбцы. Например, может оказаться нужным секционировать
индексы и таблицы по ключу времени, чтобы легче было добавлять данные новых месяцев, но чтобы получить хорошую производительность обработки запросов объемов продаж по продуктам, нам будет нужен индекс по идентификаторам продуктов.
На рис. 3.8 показан локальный индекс без префикса для таблицы покупок по столбцу идентификатора продуктов product_id. Схема секционирования та же, что и для таблицы покупок (т. е., по столбцу time_key). Приведенный пример показывает, как можно создать такой индекс.
create bitmap index easydw.purchase_product_index
ON purchases (product_id)
local
{partition indexJan2002 tablespace purchases_jan2002_idx, partition indexFeb2002 tablespace purchases_feb2002_idx, partition indexMar2002 tablespace purchases_mar2002_idx);
При таком индексе, если производить поиск объема продаж определенного продукта, например палаток, оптимизатор не сможет выполнять операцию от-" сечения разделов и должен будет проводить поиск данных по всем месяцам. Однако при запросе «Сколько палаток продано январе?» — оптимизатор сможет отбросить разделы индекса, посвященные февралю и марту.
Если обобщить сказанное, локальные индексы с префиксом являются наиболее эффективным типом индекса с точки зрения производительности обработки запросов, поскольку оптимизатор сможет использовать отсечение разделов и не заглядывать в ненужные. Локальные индексы также облегчают операции по типу «сдвигающейся рамки». Если возможно, избегайте исполь-
зовать глобальные индексы, поскольку они требуют дополнительного обслуживания и потому что индексы на основе битовых карт не могут быть глобальными.
Метки:10, 11, 12, 13, 14, 15, 4, 5, 6, 7, 8, 9
Статьи по теме:
No related posts