alt=capaSQL12.JPG hspace=0 src="/loja/img/Capa_SQL37_G.gif" border=0>
Clique aqui para ler todos os artigos desta edição
Índices no Oracle - Parte 2
Em continuidade à primeira parte do artigo sobre índices, publicado na edição 36 da revista SQL Magazine, abordarei novos aspectos referentes à utilização de índices no Oracle.
Veremos os conceitos sobre índices particionados, uma visão geral sobre o gerenciamento de índices e finalizo o artigo falando um pouco sobre tuning de uma maneira prática, através de um teste real.
Índice particionado
O conceito de índice particionado ou índice segmentado nada mais é do que uma alternativa oferecida pelo Oracle para as tabelas particionadas ou segmentadas (Nota 1). Existem dois tipos de índices particionados:
· LOCAL: todas as entradas de índice em uma única partição corresponderão a uma única partição da tabela. São criados com a cláusula LOCAL e suportam a partição de forma independente. Essa independência garante uma melhor eficiência do Oracle na maioria das vezes.
· GLOBAL: neste caso, o índice criado em um único segmento suporta as múltiplas partições da tabela. São criados com a cláusula GLOBAL e não suportam de forma independente cada partição. Os índices globais só podem ser utilizados em tabelas particionadas por 'RANGE'.
A Listagem 1 mostra a criação de tabelas particionadas utilizando os três métodos e também a criação de índices particionados utilizando os dois conceitos, global e local.
Listagem 1. Criação de tabela particionada e respectivos índices global e local.
--Tabela particionada por RANGE.
CREATE TABLE PART.sales_range
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY RANGE(sales_date)
(PARTITION sales_jan2006 VALUES LESS THAN(TO_DATE(‘31/01/2006’,’DD/
MM/YYYY’)),
PARTITION sales_feb2006 VALUES LESS THAN(TO_DATE(‘28/02/2006’,’DD/
MM/YYYY’)),
PARTITION sales_mar2006 VALUES LESS THAN(TO_DATE(‘31/03/2006’,’DD/
MM/YYYY’)),
PARTITION sales_apr2006 VALUES LESS THAN(TO_DATE(‘30/04/2006’,’DD/
MM/YYYY’)));
--Tabela particionada por LIST
CREATE TABLE PART.sales_list
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_state VARCHAR2(20),
sales_amount NUMBER(10),
sales_date DATE)
PARTITION BY LIST(sales_state)
(PARTITION sales_west VALUES(‘California’, ‘Hawaii’),
...