O Poder da Indexação em Tabelas de Banco de Dados
Ao trabalhar com bancos de dados, a maioria dos desenvolvedores entende o conceito de um índice e por que ele é usado: para acelerar a recuperação de dados. Mas o real impacto da indexação muitas vezes só fica claro quando comparamos cenários com e sem ela.
Você sabe o que acontece sem um índice?
Imagine uma tabela com três colunas: Name, Age, e MobileNumber.
.png)
Considere esta consulta:
.png)
Se a coluna Idade (Age) não tiver um índice, o motor do banco de dados irá:
- Verificar se o campo da condição
WHEREpossui um índice. - Se não houver, ele fará uma varredura completa da tabela.
- Para cada linha, ele verificará o valor da Idade e retornará as correspondências.
Isso significa que o motor atravessa toda a estrutura de dados, o que consome muito tempo em tabelas grandes.
O que acontece com um índice?
Agora, se a coluna Idade estiver indexada, o processo muda drasticamente:
- O motor vai diretamente para a estrutura do índice.
- Ele encontra o nó para Idade = 26.
- O índice aponta para os IDs de registro correspondentes na tabela principal.
- O resultado é obtido quase instantaneamente.
É por isso que a indexação é uma ferramenta de otimização tão poderosa.
Uma Lição da Vida Real
Recentemente, encontramos uma situação interessante que destacou a importância dos índices. Nossa tabela tinha 5 registros e a coluna Idade estava indexada. Então, por engano, excluímos duas entradas da estrutura do índice (não da tabela principal). Essas entradas correspondiam aos IDs X001 e X005, ambos com Idade = 26.
.png)
Quando executamos:SELECT ID, Age, EmpId, Mobile, NameFROM Company.Employee WHERE Age = 26
Esperávamos 3 registros (já que a tabela principal ainda os tinha), mas apenas 2 registros apareceram.
.png)
Por quê? Porque a consulta confiou no índice, e o índice estava incompleto.
Conclusão Principal
Os índices são poderosos, mas devem ser mantidos adequadamente. Se um índice for excluído acidentalmente ou corrompido, não se preocupe; você pode reconstruí-lo usando o comando abaixo:
Do ##Class(Company.Employee).%BuildIndices()
.png)
Moral da história: Índices tornam as consultas rápidas, mas também se tornam a "fonte única da verdade" para a recuperação. Manipule-os com cuidado! 😅
(1).jpg)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)