Índices – Uma Visão Interna – Parte I

Para iniciar minha participação neste espaço, gostaria de escrever sobre um assunto que tenho extremo interesse e ao qual dedicarei uma série de seis artigos aqui iniciada, índices.

Introdução

Qualquer profissional da área de bancos de dados, relacionais ou não – afinal de contas orientação a objetos ainda não prevê nada novo que seja tão rápido em pesquisas como índices – tem uma verdadeira febre para busca de performance, e neste cenário os índices aparecem em quase todo o elenco, nos fornecendo diversas estratégias para a obtenção de velocidade em pesquisas de registros.

Sabemos que para um bom trabalho com bancos de dados não basta apenas espalhar entre vários blocos os registros que representam tuplas da relação ou objetos da extensão. Para termos convicção disto, basta nos indagar em como responderíamos até mesmo a uma consulta extremamente simples, como por exemplo SELECT * FROM CIDADES. Uma “viagem” bloco-a-bloco no sistema de armazenamento teria que ser feita e ainda teríamos que ter informações suficientes nos cabeçalhos de blocos para identificar em que ponto do bloco os registros começam e a que relação cada registro pertence.

A evolução disto surgiu com a técnica de reservar alguns blocos, ou até vários cilindros inteiros, para uma determinada relação. Todos os blocos nesses cilindros poderiam se destinar a conter registros que representam tuplas de nossa relação. No entanto, bastaríamos “enriquecer” um pouco mais nossa consulta para encontrarmos novos problemas. Por exemplo:

SELECT * FROM Cidades WHERE nome = ‘Belém’;

Nesta consulta estamos simplesmente tentando encontrar uma tupla fornecendo o valor de sua chave primária. Aqui, exigiríamos o exame de todos os blocos nos quais a tupla Cidades poderiam ser encontradas. Devido a problemas como estes, e sempre em busca de performance, muitas vezes criamos um ou mais índices em uma relação.

Definindo Índice

Segundo Jeffrey Ullman, que forneceu – na minha opinião – a mais completa definição de índices, “um índice é qualquer estrutura de dados que recebe como entrada uma propriedade de registros – em geral, o valor de um ou mais campos – e encontra os registros com essa propriedade “rapidamente”.

Trocando em miúdos, um índice é um meio que nos permite localizar um registro sem ter de examinar mais que uma pequena fração de todos os registros possíveis, sendo que o(s) campo(s) em cujos valores o índice se baseia forma(m) a chave de pesquisa.

23-05pic01.JPG 

Nos próximos artigos discutiremos ainda as várias estruturas diferentes que servem como índices, bem como métodos para planejar e implementar índices.

Um abraço,

Alexandre Magno