Exemplo:
Suponha que tenhamos um arquivo ordenado com 30.000 registros armazenados em um disco com tamanho de bloco igual a 1.024 bytes. Os registros de arquivo são de tamanho fixo e não espalhados, com tamanho de registro de 100 bytes, ou seja, cada bloco contém 1.024/100 = 10 registros por bloco. O número de blocos necessários para armazenar todos os registros é 30.000 / 10 = 3.000 blocos. Uma pesquisa binária no arquivo de dados precisaria de aproximadamente Log2 3.000 = 12 acessos. Ou seja, aplicando a técnica de B-tree, qualquer registro poderia ser localizado em no máximo 12 testes lógicos.
Agora, suponha que o campo de chave de ordenação do arquivo seja de 9 bytes de extensão, um ponteiro de bloco possua 6 bytes de extensão e que tenhamos construído um índice primário para o arquivo. O tamanho de cada entrada de índice é de (9 + 6) 15 bytes. O fator de bloco para o índice é 1.024/15 = 68 entradas por bloco. O número total de entradas de índice r, é igual ao número de blocos no arquivo de dados, que é 3.000. O número de blocos de índice é, portanto, 3.000 / 68 = 45 blocos. Para realizar uma pesquisa binária no arquivo de índice, seriam necessários apenas Log2 45 = 6 acessos de bloco. Assim, para procurar um registro usando o índice, precisamos de um acesso de bloco adicional ao arquivo de dados, para um total de 6 + 1 = 7 acessos de bloco — uma melhoria em relação à pesquisa binária no arquivo de dados, que exigiu 12 acessos a bloco de disco.
|
Um problema importante com índice primário — assim como com qualquer arquivo ordenado — é a inserção e exclusão de registros. Com um índice primário, o problema é aumentado porque ao se tentar inserir um registro em sua posição correta no arquivo de dados, é preciso não apenas mover registros para criar espaço para o novo registro, mas também mudar algumas entradas de índice, pois a movimentação de registros mudará os registros de endereços de alguns blocos. A exclusão de registro é tratada com marcadores de exclusão. |