TECNOLOGIA - Performance/Lentidão/Travamentos - O que são índices no processo de comunicação do sistema com o banco de dados
Dúvida
O que são índices no processo de comunicação do sistema com o banco de dados?
Solução
Importante
Este artigo tem por objetivo dar uma visão resumida do que são índices no banco de dados. Para maiores informações sobre esses conceitos, você pode fazer pesquisas na Internet ou acionar o DBA da sua empresa para explicações mais detalhadas.
Um índice é uma estrutura adicional à tabela/dado, possuindo uma estrutura própria que aponta para onde está o dado completo. A sua estrutura é menor que a tabela que armazena o dado.
O índice está sempre vinculado a colunas de uma tabela do banco de dados.
Você pode fazer uma analogia do índice como se fosse o índice de um Documento do Microsoft Word que utilize a funcionalidade de índices. Ou seja, você possui uma funcionalidade que demonstra parte do dado (não ele completo) e ele te direciona para onde o dado completo está.
O índice é baseado no conceito de Árvore Binária. Para maiores informações sobre esse conceito, você poderá buscar informações na internet. Sugestão: link para verificação do conceito na Wikipedia.
- O topo da árvore é o meio do caminho. Então se a tabela possui 1.000.000 de linhas, o topo da árvore será a linha 500.000;
- Pode ter N nós abaixo, conforme o tamanho das páginas de dados que forma o índice. Cada nó se subdivide novamente;
- Cada atualização nos campos que compõe o índice faz sua árvore ser atualizada;
Abaixo segue uma imagem que exemplifica a estrutura de árvore de um índice.
Abaixo segue uma imagem que exemplifica como que a linha (dado) fica sendo reestruturado dentro de um índice de árvore binária a cada inserção efetuado dentro da estrutura da tabela que possui este índice, até chegar na árvore exemplificada na primeira imagem:
O que o índice acarreta no banco de dados?
O índice acarretará um tempo um pouco maior para que o banco de dados execute updates e inserts nas tabelas que estejam envolvidas, pois a árvore do índice precisa ser refeita a cada alteração do campo.
Sobre o impacto de manipulação de volumes de dados em colunas que possuem índice
Quando você efetua uma alteração (insert/update) em uma tabela em uma coluna que possua um índice, o banco de dados atualizará a estrutura da árvore desse índice. Desta forma:
- Se você atualizar em um único update 10.000 linhas de uma tabela que possui uma coluna indexada, o banco de dados reconstruirá a árvore do índice apenas uma vez nesse processo;
- Se você realizar 10.000 updates separados nesta mesma tabela, o banco de dados reconstruirá a árvore de índice 10.000 vezes (uma vez para cada update).
Neste caso, é importante levar isso em consideração no momento de efetuar a manipulação dos dados desejados.
Quando utilizar índices (melhor prática): a recomendação de utilização para colunas onde serão aplicados selects que utilizarão a cláusula WHERE onde haverá o filtro grande de massa de dados, e essas colunas não sofrem muitos updates.
Quando NÃO utilizar índices (não recomendado):
- Quando a coluna da tabela possui poucos valores distintos. Exemplo: a tabela possui 1.000.000 de linhas e aplica-se um filtro para uma coluna que possui apenas o preenchimento como "N" ou "S". Neste caso, o índice não terá efeito positivo;
- Quando as coluna sofrem muitos updates. Isso porque a cada update realizado, a árvore de índice precisa ser refeita.
Observação
Para mais informações sobre o questões relacionadas a Performance/Lentidão/Travamentos do Gestão Empresarial | ERP, consulte o artigo ERP - Performance/Lentidão/Travamentos - Onde é possível encontrar informações diversas sobre questões relacionadas a Performance/Lentidão/Travamentos (índice).