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’),

...

Quer ler esse conteúdo completo? Tenha acesso completo