Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

a coluna incrementada torna o índice da árvore b na coluna desequilibrado?


Oracle 's índices nunca são "desequilibrados":cada folha no índice está na mesma profundidade que qualquer outra folha.

Nenhuma divisão de página introduz um novo nível por si só:uma página folha não se torna pai para novas páginas como seria em uma árvore não auto-balanceada.

Em vez disso, é criado um irmão para a página dividida e o novo registro (mais possivelmente alguns dos registros da página antiga) vão para a nova página. Um ponteiro para a nova página é adicionado ao pai.

Se a página pai também estiver sem espaço (não puder aceitar o ponteiro para a página folha recém-criada), ela também será dividida e assim por diante.

Essas divisões podem se propagar até a página raiz, cuja divisão é a única coisa que aumenta a profundidade do índice (e faz isso para todas as páginas de uma só vez).

As páginas de índice são organizadas adicionalmente em listas com links duplos, cada lista em seu próprio nível. Isso seria impossível se a árvore estivesse desequilibrada.

Se master_id é incrementado automaticamente isto significa que todas as divisões ocorrem no final (como o chamado 90/10 splits) o que torna o índice mais denso possível.

Não, não seria, pelas razões acima.

Se você se juntar ao slave para master frequentemente, você pode considerar a criação de um CLUSTER das duas tabelas, indexadas por master_id . Isso significa que os registros de ambas as tabelas, compartilhando o mesmo master_id , vá para as mesmas páginas de dados ou próximas, o que torna a junção entre elas muito rápida.

Quando o mecanismo encontrou um registro de master , com um índice ou qualquer outra coisa, isso também significa que já encontrou os registros de slave para se juntar a esse master . E vice-versa, localizando um slave também significa localizar seu master .