Índices
- Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke, McGrow-Hill, 2003.
- Após o desenvolvimento inicial com a confecção do:
- Projeto Entidade Relacionamento (DER)
- Refinamento do esquema (Normalização)
- Definição de visões e relatórios
- podemos definir o modelo conceitual e externo para o BD
- Na sequência:
- Seleciona-se os índices
- Decide-se os agrupamentos
- E (se necessário) refina-se os modelos conceitual e externo para atingir metas de desempenho.
- Função do índice:
- No contexto do livro, serve para procurar um determinado assunto identificando o volume ou página.
- No contexto da estrutura de dados, o índice é uma referência associada a uma chave, que é utilizada para fins de otimização, permitindo uma localização mais rápida de um registro quando efetuada uma consulta.
- No contexto de banco de dados, um índice tem a função de permitir que os registros com dados sejam encontrados com rapidez. Também oferecem um acesso alternativo aos registros sem que a posição física seja alterada
- Exemplo:
- Cadastro de Clientes
- Chave: CPF
- Se precisarmos de uma lista de clientes por ordem de CEP, é possível indexar e listar dessa maneira
- Pode ser necessário também:
- Lista por ordem de Nome
- Lista por ordem de Estado Civil
- Lista por ordem de Status
- Lista por ordem de Data de Nascimento
- Lista por ordem de Bairr
- Lista por ordem de Data do Cadastro
- Lista por ordem de Email
- Efetivamente, os índices são um modo comum de melhorar o desempenho do banco de dados pois permitem 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 e espaço adicional para o sistema de banco de dados como um todo devendo, portanto, serem utilizados com sensatez.
- O processo pode ser iniciado pela compreensão do ambiente (negócio) onde será implantando e definir:
- As consultas mais importantes e a frequência com que aparecem
- As atualizações mais relevantes a frequência com que podem ser feitas
- O desempenho desejado para estas consultas e atualizações.
- Um índice pode ser:
- simples: quando formado por apenas uma coluna
- composto: referenciado por mais de uma coluna
- interno: a chave está contida dentro da tabela
- externo: quando existe uma tabela de chaves separada que associa ponteiros à registros de uma tabela
- Preocupações:
- Que índices deve-se criar?
- Quais relações devem ter índices?
- Qual(is) campo(s) devem estar na chave de pesquisa?
- Deve-se construir vários índices?
- Que índices deve-se criar?
- Devemos fazer mudanças no esquema conceitual?
- Considerar esquemas normalizados alternativos?
- Há várias escolhas na decomposição em formas normais, etc
- Devemos “desfazer” alguns passos da decomposição e ficar com uma forma normal mais baixa?
- Desnormalização?
- Considerações para Seleção de Índice:
- É necessária a criação do índice?
- Escolha da chave de busca
- Utilizar múltiplos atributos na chave de busca
- Modelos de Implementação:
- Índices de Agrupamento: Os dados são armazenados em clusters e em ordem crescente. A ordem dos valores de índices também é crescente.
- Índices Hash: Permite inserção de novos elementos mas ocupa maior quantidade de espaço
- Índices em Árvore : No caso de árvore binária, da busca é muito eficiente mas a tabela deve estar em ordem crescente ou decrescente.
- Balanceamento do custo de manutenção do índice.
- Os campos utilizados na definição dos índices denominam-se campos de indexação
- Os índices não contém dados propriamente ditos e sim valor de campo de indexação e ponteiros que direcionam para o registro adequado dentro da tabela
- Inserindo ou excluindo o registro, força também uma alteração nos índices
- Em alguns sistemas, os índices encontram-se separados do arquivo de dados
Comparação entre Hash e Árvore
- Árvore trabalha bem para pesquisas por faixa de valores e o hashing para consultas simples (valor definido)
- A árvore tem menor eficiência, porém é mais fácil de implementar
- A inclusão e exclusão é mais fácil utilizando hashing
- O processamento sequencial é mais fácil na árvore B
- A maioria dos bancos de dados utilizam a indexação em árvores B
- No PostgreSQL o projetista do banco de dados pode escolher entre árvore ou hash
Exercícios
- Dar nome ao projeto
- Escrever escopo
- Citar as principais tabelas do projeto
- Nomear os índices utilizados para cada tabela do item 3
- Projeto:
- Escopo:
- Tabelas principais:
- Índices Tabela 1:
- 1
- 2
- 3
- 4
- ...
- n
- Índices Tabela 2:
- 1
- 2
- 3
- 4
- ...
- n
- Índices Tabela 3:
- 1
- 2
- 3
- 4
- ...
- n
- Índices Tabela m:
- 1
- 2
- 3
- 4
- ...
- n