AULA 56 MÓDULO 7 banco de dados ⏱ 55 min

Índices e Performance

Por que índices funcionam. B-Tree, Hash, GIN, IVFFlat. Índices parciais e compostos. EXPLAIN ANALYZE para diagnóstico.

índicesB-TreeGINEXPLAIN ANALYZEsequential scanindex scanJSONB

Índices em bancos de dados

Um índice é uma estrutura de dados auxiliar que acelera queries. Sem índice, o banco faz sequential scan — lê todas as linhas. Com índice, usa index scan — vai direto ao dado.

📚
analogia — sumário de livro
Sem índice, você lê o livro todo procurando o capítulo. Com índice (sumário), vai direto à página. Mas criar muitos índices tem custo: mais espaço e INSERT/UPDATE mais lento.
Sem índice — O(n)
1 milhão de rows
query sem índice: 800ms
Sequential scan em toda tabela
Com índice — O(log n)
1 milhão de rows
query com índice: 0.5ms
Index scan: vai direto ao dado

Tipos de índices

PostgreSQL tem vários tipos de índice para diferentes padrões de query.

B-Tree
Padrão. =, <, >, BETWEEN, ORDER BY. 99% dos casos.
Hash
Só igualdade (=). Mais rápido para isso, mas sem range.
GIN
Arrays, JSONB, full-text search.
IVFFlat
Vetores (pgvector). Busca por similaridade aproximada.
javascript
-- Índices — quando criar e como

-- B-Tree: colunas em WHERE, JOIN, ORDER BY
CREATE INDEX idx_orders_user_id    ON orders(user_id);
CREATE INDEX idx_orders_status     ON orders(status);
CREATE INDEX idx_orders_created_at ON orders(created_at DESC);

-- Índice composto — query combina múltiplas colunas
CREATE INDEX idx_orders_user_status
  ON orders(user_id, status)
  WHERE status != 'done'; -- índice parcial

-- GIN para JSONB
CREATE INDEX idx_products_meta ON products USING gin(metadata);

-- EXPLAIN ANALYZE — identificar missing indexes
EXPLAIN ANALYZE
  SELECT * FROM orders
  WHERE user_id = 'uuid-aqui' AND status = 'paid'
  ORDER BY created_at DESC;

-- Seq Scan = falta índice
-- Index Scan = índice em uso
-- Bitmap Index Scan = índice parcial em uso
quiz · aula 56
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Por que índices tornam queries mais rápidas?
QUESTÃO 02
Quando um índice pode prejudicar performance?
QUESTÃO 03
Qual tipo de índice usar para queries em campos JSONB?
0/3