Seleção de Índices

A criação de índices deve ser criteriosa pois existem mais e menos valias:

  • Um índice pode acelerar o processo de pesquisa de um valor num atributo (ou gama de valores) e junções envolvendo esse atributo.

  • Um índice introduz overhead ao nível do volume de dados e do tempo de inserção, atualização e eliminação de tuplos (i.e. as operações são mais complexas).

A escolha deve ser um compromisso entre:

  1. perceber se vamos ter necessidade de efetuar muitas pesquisas envolvendo determinado atributo (candidato a index).

  2. perceber se determinada relação vai ter modificações frequentes de dados.

Recomendação:

  • estudar o tipo de consultas das aplicações e/ou utilizar registos de log (histórico de queries) para ajudar na decisão.

Factor “Organização Física dos Dados”

Os tuplos estão distribuídos por várias páginas (blocos).

A pesquisa de um único tuplo obriga a carregar em memória toda a página onde ele se encontra.

  • Operações de I/O são bastante onerosas em termos temporais.

Os próprios índices também são guardados, total ou parcialmente, em páginas:

  • Operações de acesso e modificação dos índices também tem custos temporais.

Recomendação:

  • Tentar perceber se determinado índice obriga a carregar muitas (ou poucas) páginas em memória num processo de pesquisa

  • Índices que necessitam de carregar poucas páginas da relação, para encontrar o tuplo, reduzem significativamente o tempo de pesquisa

Critérios Genéricos

Indexação das chaves da relação.

  • Pesquisamos frequentemente por atributos chave da relação;

  • Sendo a chave única, ou existe tuplo ou não.

    • Só uma página é carregada para memória para ter o tuplo.

Se o índice não é chave da relação podemos ter (ou não) ganhos no tempo de pesquisa. Há duas situações recomendadas:

  • O atributo indexado tem poucos valores repetidos.

  • A relação têm o atributo indexado do tipo clustered.

    • Clustering é agrupar os valores desse atributo de forma a que ocupem o menor número de páginas.

Last updated