Í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


  1. Dar nome ao projeto
  2. Escrever escopo
  3. Citar as principais tabelas do projeto
  4. 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