Capítulo 11. Índices

Sumário
11.1. Introdução
11.2. Tipos de índice
11.3. Índices com várias colunas
11.4. Índices únicos
11.5. Índices em expressões
11.6. Classes de operadores
11.7. Índices parciais
11.8. Examinar a utilização do índice

Os índices são um modo comum de melhorar o desempenho do banco de dados. O índice permite ao servidor de banco de dados encontrar e trazer linhas específicas muito mais rápido do que faria sem o índice. Entretanto, os índices também produzem trabalho adicional para o sistema de banco de dados como um todo devendo, portanto, serem utilizados com sensatez.

11.1. Introdução

Suponha a existência de uma tabela como:

CREATE TABLE teste1 (
    id        integer,
    conteudo  varchar
);

e um aplicativo requerendo muitas consultas da forma:

SELECT conteudo FROM teste1 WHERE id = constante;

Sem preparo prévio, o sistema teria que varrer toda a tabela teste1, linha por linha, para encontrar todas as entradas correspondentes. Havendo muitas linhas em teste1, e somente poucas linhas (talvez somente uma ou nenhuma) retornadas pela consulta, então este método é claramente ineficiente. Porém, se o sistema fosse instruído para manter um índice para a coluna id, então poderia ser utilizado um método mais eficiente para localizar as linhas correspondentes. Por exemplo, só necessitaria percorrer uns poucos níveis dentro da árvore de procura.

Uma abordagem semelhante é utilizada pela maioria dos livros, fora os de ficção: os termos e os conceitos procurados freqüentemente pelos leitores são reunidos em um índice alfabético colocado no final do livro. O leitor interessado pode percorrer o índice rapidamente e ir direto para a página desejada, em vez de ter que ler o livro por inteiro em busca do que está procurando. Assim como é tarefa do autor prever os itens que os leitores mais provavelmente vão procurar, é tarefa do programador de banco de dados prever quais índices trarão benefícios.

Pode ser utilizado o seguinte comando para criar um índice na coluna id:

CREATE INDEX idx_teste1_id ON teste1 (id);

O nome idx_teste1_id pode ser escolhido livremente, mas deve ser usado algo que permita lembrar mais tarde para que serve o índice.

Para remover um índice é utilizado o comando DROP INDEX. Os índices podem ser adicionados ou removidos das tabelas a qualquer instante.

Após o índice ser criado, não é necessária mais nenhuma intervenção adicional: o sistema atualiza o índice quando a tabela é modificada, e utiliza o índice nas consultas quando julgar mais eficiente que a varredura seqüencial da tabela. Porém, talvez seja necessário executar regularmente o comando ANALYZE para atualizar as estatísticas, para permitir que o planejador de comandos tome as decisões corretas. Consulte o Capítulo 13 para obter informações sobre como descobrir se o índice está sendo utilizado; e quando e porque o planejador pode decidir não utilizar um índice.

Os índices também podem beneficiar os comandos de atualização (UPDATE) e de exclusão (DELETE) com condição de procura. Além disso, os índices também podem ser utilizados em consultas com junção. Portanto, um índice definido em uma coluna que faça parte da condição de junção pode acelerar, significativamente, a consulta.

Quando um índice é criado, o sistema precisa mantê-lo sincronizado com a tabela. Isto adiciona um trabalho extra para as operações de manipulação de dados. Portanto, os índices não essenciais ou não utilizados devem ser removidos. Deve ser observado que uma consulta ou um comando de manipulação de dados pode utilizar, no máximo, um índice por tabela.

SourceForge.net Logo CSS válido!