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
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
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