← blog
O que são índices de banco de dados, de verdade
banco de dados PostgreSQL performance exemplo
Toda vez que uma query trava em produção, a primeira pergunta é: tem índice?
Mas poucos entendem o que é um índice de fato. Vou tentar explicar do jeito que eu aprendi.
O problema que o índice resolve
Imagina uma tabela com 10 milhões de linhas. Sem índice, um SELECT WHERE email = 'x' precisa examinar todas as 10 milhões — isso é um seq scan.
Um índice é uma estrutura separada — geralmente uma B-tree — que mantém os valores de uma coluna ordenados com ponteiros para as linhas originais. A busca passa de O(n) para O(log n).
Quando não criar um índice
- Tabelas pequenas: o overhead de manter o índice pode ser maior que o custo do seq scan
- Colunas com baixa cardinalidade (poucos valores únicos, como booleanos)
- Tabelas com muitos writes: cada insert/update precisa atualizar o índice também
Tipos de índice no PostgreSQL
- B-tree: padrão, bom para igualdade e range
- GIN: ótimo para arrays e busca em texto
- GiST: geometria e dados complexos
- Hash: apenas igualdade, raramente necessário
A regra prática: crie índices baseado no seu EXPLAIN ANALYZE, não em suposições.