Í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?


  • 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


  • Projeto:
    • Escopo:
    • Tabelas principais:
    • Índices:
      • 1
      • 2
      • 3
      • 4
      • ...
      • n