Um novo recurso chamado Partial Indexes for Partitioned Tables foi introduzido no Oracle 12c.
Agora, você pode criar os índices (globais ou locais) para partições ou sub-partições específicas, isto é, os índices serão criados apenas para partições/sub-partições que você deseja.
Este recurso não é suportado para índices únicos, ou seja, para índices utilizados para impor restrições exclusivas.
Novos atributos para o comando CREATE TABLE:
- INDEXING ON (default)
- INDEXING OFF
Novos atributos para o comando CREATE INDEX:
- INDEXING FULL (default)
- INDEXING PARTIAL
Como este assunto é muito extenso e com diversas variações, irei mostrar apenas alguns exemplos de como iniciar a utilização desta nova funcionalidade.
Criando a tabela para testes:
(
coluna1 number,
coluna2 number
)
indexing on
partition by range(coluna1)
(
partition part1 values less than(100) indexing off,
partition part2 values less than(200) indexing on,
partition part3 values less than(300),
partition part4 values less than(400)
);
Table created.
Verificando o atributo indexing:
SQL> select table_name, def_indexing
from dba_part_tables
where table_name='TABELA_TESTE';
TABLE_NAME DEF -------------------- --- TABELA_TESTE ON Verificando o atributo indexing por partição:
from dba_tab_partitions
where table_name='TABELA_TESTE'
order by partition_position;
TABLE_NAME PARTITION_NAME INDEXING
-------------------- -------------------- --------
TABELA_TESTE PART1 OFF
TABELA_TESTE PART2 ON
TABELA_TESTE PART3 ON
TABELA_TESTE PART4 ON
SQL> alter table TABELA_TESTE modify default attributes indexing off;
Table altered.
SQL>select table_name, def_indexing
from dba_part_tables
where table_name='TABELA_TESTE';
TABLE_NAME DEF
-------------------- ---
TABELA_TESTE OFF
SQL> alter table TABELA_TESTE modify partition part3 indexing off;
-------------------- -------------------- --------
TABELA_TESTE PART1 OFF
TABELA_TESTE PART2 ON
TABELA_TESTE PART3 ON
TABELA_TESTE PART4 ON
Alterando o atributo indexing após a tabela criada:
Table altered.
SQL>select table_name, def_indexing
from dba_part_tables
where table_name='TABELA_TESTE';
TABLE_NAME DEF
-------------------- ---
TABELA_TESTE OFF
Alterando o atributo indexing da partição após a tabela criada:
Table altered.
SQL> select table_name, partition_name, indexing
from dba_tab_partitions
where table_name='TABELA_TESTE'
order by partition_position;
TABLE_NAME PARTITION_NAME INDEXING
-------------------- -------------------- --------
TABELA_TESTE PART1 OFF
SQL> select table_name, partition_name, indexing
from dba_tab_partitions
where table_name='TABELA_TESTE'
order by partition_position;
TABLE_NAME PARTITION_NAME INDEXING
-------------------- -------------------- --------
TABELA_TESTE PART1 OFF
TABELA_TESTE PART2 ON
TABELA_TESTE PART3 OFF
TABELA_TESTE PART4 ON
Criando um índice:
Index created.
SQL> select index_name, partition_name, status
from dba_ind_partitions
from dba_ind_partitions
where index_name='TABELA_TESTE_INDEX01'
order by partition_position;
INDEX_NAME PARTITION_NAME STATUS
-------------------- -------------------- --------
TABELA_TESTE_INDEX01 PART1 UNUSABLE
TABELA_TESTE_INDEX01 PART2 USABLE
order by partition_position;
INDEX_NAME PARTITION_NAME STATUS
-------------------- -------------------- --------
TABELA_TESTE_INDEX01 PART1 UNUSABLE
TABELA_TESTE_INDEX01 PART2 USABLE
TABELA_TESTE_INDEX01 PART3 UNUSABLE
TABELA_TESTE_INDEX01 PART4 USABLE
Efeito no plano de execução:
Referências:
Abraço,
Alex Zaballa.
0 comentários:
Postar um comentário