Índice
O que é o fator de clustering de índice Oracle (CF)?
O fator de agrupamento é um número que representa o grau em que os dados são distribuídos aleatoriamente em uma tabela em comparação com a coluna indexada. Em termos simples, é o número de “chaves de bloco” durante a leitura de uma tabela usando um índice.
É uma estatística importante que desempenha um papel importante no cálculo do otimizador. Ele é usado para ponderar o cálculo para as varreduras do intervalo do índice. Quando o fator de agrupamento é maior, o custo da verificação do intervalo do índice é maior
Um bom fator de Clustering é igual (ou próximo) aos valores do número de blocos da tabela.
Um fator de clustering ruim é igual (ou próximo) ao número de linhas da tabela.
Como o CF é calculado?
A Oracle calcula o fator de clustering fazendo uma verificação completa do índice percorrendo os blocos folha de ponta a ponta. Para cada entrada em cada folha, a Oracle verifica o número absoluto do arquivo e o ID do bloco, conforme obtido do ROWID do valor indexado. Ele mantém uma contagem contínua de quantos blocos "diferentes" contêm linhas de dados apontadas pelo índice. O endereço do bloco da primeira entrada é comparado ao endereço do bloco da segunda entrada. Se for o mesmo bloco de tabela, o Oracle não incrementa o contador. Se os blocos da tabela forem diferentes, o Oracle adicionará um à contagem. Esse processo de contagem continua de entrada em entrada sempre comparando a entrada anterior com a atual.
O exemplo acima é um bom exemplo de CF, pois o CF é igual ao número de blocos
Exemplo de fator de agrupamento incorreto
Aqui o fator de agrupamento é igual a nenhum de linhas
Este método de contagem tem seu próprio resultado inesperado. Suponha que os dados sejam preenchidos em um pequeno conjunto de blocos, mas não em ordem em referência à chave de índice, então um conjunto de linhas pode parecer estar em um grande conjunto de blocos quando talvez haja apenas alguns blocos distintos verdadeiros . Portanto, CF seria maior, mas, na verdade, está tocando muito poucos blocos. Esse problema pode ser mitigado em 12c usando preferências de tabela e especificando o bloco em cache com tabela.
como melhorar o fator de agrupamento no oracle
Uma reconstrução de índice não teria nenhum efeito no fator de clustering. A tabela precisa ser classificada e reconstruída para diminuir o fator de agrupamento.
Consulta para determinar o fator de agrupamento
O CF é armazenado no dicionário de dados e pode ser visualizado em dba_indexes (ou user_indexes).
Na verdade, todas as estatísticas do índice podem ser encontradas lá
SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;
Como o fator de cluster de índice Oracle afeta o plano do otimizador?
O fator de clustering é a principal estatística que o otimizador usa para ponderar os caminhos de acesso do índice. É uma estimativa do número de LIOs para blocos de tabela necessários para adquirir todas as linhas que atendem à consulta em ordem. Quanto maior o fator de agrupamento, mais LIOs o otimizador estimará que serão necessários. Quanto mais LIOs forem necessárias, menos atraente e, portanto, mais caro será o uso do índice.
Artigo relacionado
Índice de partição Oracle:Entendendo o índice de partição Oracle, O que são índices globais não particionados?, O que são índices prefixados locais, índice local não prefixado
encontre índices em uma tabela no oracle:confira este artigo para encontrar consultas sobre como para encontrar índices em uma tabela no oracle, liste todos os índices no esquema, status do índice, coluna de índice
tipos de índices no oracle:Esta página consiste em informações de índices do oracle, diferentes tipos de índices no oracle com um exemplo, como para criar/descartar/alterar o índice no oracle
Índice Virtual no Oracle:O que é o Índice Virtual no Oracle? Usos, limitação, vantagem e como usar para verificar o plano de explicação no banco de dados Oracle, parâmetro oculto _USE_NOSEGMENT_INDEXES