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
.