Eu estava tentando ver os níveis da árvore b para os índices e, para minha surpresa, vejo que alguns deles estão definidos como nulos.
SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc;
Seu nome começa com “SYS _” (imagem anexada abaixo). SO, estou assumindo que são índices gerados pelo sistema? Talvez de chaves primárias? De qualquer forma, estou curioso para saber por que eles são nulos. Posso entender se o valor é 0, o que significa que tudo está em nós folha e levará apenas 1 salto para que a varredura exclusiva obtenha os dados.
Comentários
Resposta
Índices cujos nome que começa com SYS_IL..
são índices LOB.
BLEVEL
é uma propriedade dos índices B-tree, e não faz sentido para índices LOB.
Mesmo se você coletar estatísticas, BLEVEL
para tal índice permanecerá nulo.
Resposta
Obrigado @Balazs pela informação.
Fiz alguma pesquisa sobre isso e parece que –
Um lob é simplesmente um ponteiro e aponta para um bloco de dados que faz esse lob. Portanto, ao criar uma coluna lob, você obtém automaticamente um índice lob para que os fragmentos de dados sejam recuperados mais rapidamente e o segmento que contém esses fragmentos de dados.
Use as seguintes consultas para verificar o mesmo –
SELECT index_name,INDEX_TYPE, blevel FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ORDER BY 3 desc;
Para ver os segmentos associados –
select segment_name, segment_type, tablespace_name, bytes, max_extents from user_segments where segment_name in ( SELECT index_name FROM user_indexes where blevel is null and index_name like "SYS_IL%%" );
Você pode excluir isso descartando a tabela que tem a coluna lob ou a própria coluna.
*_indexes
docs diz " Os nomes das colunas seguidos por um asterisco são preenchidos apenas se você coletar estatísticas no índice usando a instrução ANALYZE ou o pacote DBMS_STATS. " Acho que o mecanismo não ' executa nenhum desses comandos contra alguns ou todos os índices de tabelas do sistema …