Se você já ouviu a frase “a query está lenta”, a primeira coisa que deve vir à sua mente é: “Será que os índices estão corretos?”. Em 90 % dos casos de problemas de performance em bancos de dados relacionais, a resposta está na ausência ou no uso inadequado de índices.
O que é um Índice, afinal?
Pense no índice de um livro. Em vez de folhear o livro inteiro procurando por um capítulo, você vai direto ao índice, encontra o número da página e salta para lá. Um índice no SQL Server funciona da mesma forma: é uma estrutura de dados separada que armazena uma cópia de uma ou mais colunas de uma tabela, de forma ordenada, com um ponteiro para a linha original do dado.
Tipos Principais de Índices
- Clusterizado (Clustered): a própria tabela é fisicamente ordenada com base na coluna do índice. Só pode haver um por tabela. Pense nele como a “espinha dorsal” da sua tabela.
- Não Clusterizado (Non‑Clustered): é uma estrutura separada que aponta para os dados. Você pode ter vários por tabela. É como o índice remissivo no final de um livro.
Quando usar? Uma Regra de Ouro
A regra é simples: toda coluna que você usa frequentemente em cláusulas WHERE, JOIN ou ORDER BY é uma forte candidata a ter um índice. Mas cuidado! Índices aceleram a leitura (SELECT), mas deixam a escrita (INSERT, UPDATE, DELETE) um pouco mais lenta, pois o índice também precisa ser atualizado.
-- Exemplo: Uma query que se beneficiaria de um índice SELECT p.ProductName, c.CategoryName FROM Products p INNER JOIN Categories c ON p.CategoryID = c.CategoryID WHERE p.Discontinued = 0 ORDER BY p.ProductName;
Neste caso, colunas como p.CategoryID e p.Discontinued são candidatas perfeitas para índices não clusterizados, acelerando o filtro e o join.
Dominar a arte da indexação é o que separa um bom arquiteto de um ótimo arquiteto. É um investimento de tempo que se paga exponencialmente em performance e na satisfação do usuário final.
Seja o primeiro a comentar!