quando preciso reconstruir um index.
estamos usando em índices de bitmap de data warehouse. se eu truncar a tabela e não houver nenhuma linha e depois inserir novas linhas, um índice deve ser reconstruído, até onde eu sei, porque isso faz sentido.
É sempre verdadeiro quando uma nova linha é atualizada, inserida ou excluída, não importa se com instruções únicas ou usando a instrução de mesclagem, o Oracle atualiza todos os tipos de índices automaticamente?
Se você truncar uma tabela, todos os índices ficarão
USABLE
vazios. Na verdade, se um índice forUNUSABLE
truncado, na verdade o marcaráUSABLE
pelo fato de saber que não há linhas.Quando você
insert, update, delete, merge
, etc., o Oracle mantém a validade dos índices reconstruindo seus blocos de folha e (às vezes) de ramificação com as entradas novas ou removidas. É por isso que ter um número excessivo de índices em uma tabela pode realmente tornar as operações DML mais lentas, principalmente inserções e exclusões. Isso vale tanto para índices de bitmap quanto de b-tree.Algumas inserções, entretanto, podem ser feitas no modo de caminho direto.
INSERT /*+ APPEND */
, inserções comparallel dml
habilitado (que assume/*+ APPEND */
mesmo se não declarado explicitamente), SQL*Loader comdirect=true
, etc.. eles adiarão a manutenção do índice até o final da instrução. Isso ajuda a acelerar consideravelmente o custo de manutenção de índices para operações em massa. Portanto, se você carregar um milhão de linhas, os índices serão ignorados durante o carregamento, mas depois que a última linha for inserida, ele reconstruirá os blocos de índice afetados para sincronizá-los.Portanto, enquanto seus índices permanecerem em um estado utilizável, eles sempre estarão sincronizados com os blocos de dados para os quais apontam. Os índices podem se tornar inutilizáveis nessas circunstâncias:
alter index ... unusable
)alter table ... move
) sem aupdate indexes
cláusula " ".excluding indexes
opção " "SKIP_INDEX_MAINTENANCE
opção definida, ou um índice exclusivo encontra linhas duplicadas durante a fase de manutenção do índice.Se algum dos motivos acima fizer com que os índices se tornem inutilizáveis, os índices ou as partições afetadas deles precisarão ser reconstruídos manualmente (
ALTER INDEX ... REBUILD
). Até que isso seja feito, as alterações na tabela não são mais mantidas em sincronia com os índices... um índice inutilizável é na verdade um índice vazio, na verdade inexistente do ponto de vista espacial, apenas um objeto lógico sem segmento de dados subjacente. Reconstruí-lo na verdade cria um segmento para que ele use espaço e contenha entradas. Depois de reconstruído, ele será mantido em sincronia com outras alterações de dados.