Ir para o conteúdo principal
← 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.