Bóson Treinamentos em Ciência e Tecnologia

O que são Índices em Bancos de Dados – Indexação em Tabelas

O que são índices em bancos de dados

O que são Índices em Bancos de Dados

Grande parte das consultas a um banco de dados se referem a somente uma pequena parcela dos registros armazenados nas tabelas. Por exemplo, uma consulta do tipo “retorne todos os livros do autor C.J. Date” se refere a apenas uma ínfima parte do total de registros de livros em uma biblioteca ou livraria. É altamente ineficiente para o SGBD ter de ler cada registro na tabela para verificar se o autor é o Date; de forma ideal, o sistema deveria conseguir localizar esses registros diretamente. Para isso, criamos estruturas especiais nas tabelas, chamadas de Índices.

Os índices são uma das ferramentas de otimização mais conhecidas e utilizadas pelos desenvolvedores de bancos de dados.

O emprego de indexação em tabelas pode aumentar significativamente a performance em consultas ao banco de dados, porém pode diminuir a velocidade de transações como inserts e updates. Portanto, saber quais tarefas são mais importantes no sistema em questão – se de leitura ou de escrita – nos dá um ponto de partida para saber como lidar com a indexação.

No geral, é interessante termos mais de um índice em uma tabela. O atributo (ou conjunto de atributos) usado para procurar registros em uma tabela é chamado de chave de procura.

Por padrão, os SGBDs criam índices automaticamente para campos de:

Além disso, podemos criar índices para outras colunas usadas com frequência em buscas ou junções.

Classificamos os índices em duas grandes categorias:

Índice Clusterizado

Os Índices clusterizados alteram a forma como os dados são armazenados em um banco de dados, pois ele classifica as linhas de acordo com a coluna que possui o índice. Uma tabela só pode ter um índice clusterizado. Geralmente ele está na coluna que é chave primária da tabela ou, em sua ausência, em uma coluna UNIQUE.
Caso uma tabela não possua um índice clusterizado, suas linhas são armazenadas em uma estrutura não-ordenada chamada de heap.

Normalmente, a chave de busca de um índice primário é a chave primária da tabela (mas nem sempre).

Índice Não-Clusterizado

Em um índice não-clusterizado a forma como os dados são armazenados em disco não é alterada, e um objeto separado é criado na tabela, apontando para as linhas da tabela original após a busca. Este tipo de índice se baseia em valores-chave.

Uma tabela pode ter vários índices não-clusterizados.

Os índices secundários melhoram o desempenho das consultas que usam chaves diferentes da chave de procura do índice primário. O projetista do banco de dados deve decidir quais índices não-clusterizados devem ser criados com base na estimativa da frequência de consultas e atualizações dos registros.

Tipos de índices

Existem vários tipos de índices que podem ser criados em tabelas, de acordo com técnicas variadas. Os mais comuns são:

A figura a seguir ilustra a estrutura de um índice não-clusterizado do tipo árvore balanceada (b-tree):

Árvore Balanceada – Índice B-Tree

No exemplo da figura, o algoritmo de árvore balanceada aumenta o desempenho de consultas que tenham seu resultado filtrado pelo nome da pessoa, que é a coluna com valor-chave indexado. Por exemplo, se for realizada uma consulta que precise retornar dados da pessoa de nome “Barbara”, usando essa coluna como critério de filtragem na cláusula WHERE, o processo será realizado acessando o nó raiz, determinando o próximo nó a acessar –  que é o nó intermediário A-G, onde se encontra a inicial “B” do nome buscado – e então acessando diretamente o registro desejado no nó-folha cuja chave possui dados iniciados com a letra “B”.

Recomenda-se não indexar tabelas pequenas (que possuam poucos registros); um escaneamento completo da tabela (full table scan) acaba por ser a alternativa mais rápida para obter o resultado de uma consulta neste caso.

E como criamos índices em uma tabela? Confira exemplos nesta lição sobre índices em MySQL.

 

Sair da versão mobile