Índices para consultas comuns
Adicione índices para as consultas que você mais executará: por usuário, por data e por chave estrangeira, e meça o impacto com EXPLAIN.
Índices para consultas comuns é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O que é um índice?
Um índice é uma estrutura de dados separada no disco que permite ao banco de dados encontrar linhas pelo valor de uma coluna sem examinar a tabela inteira. A implementação clássica é uma árvore B.
Índices trocam desempenho de escrita por desempenho de leitura
Cada índice torna INSERT/UPDATE/DELETE um pouco mais lento (o índice também precisa ser atualizado). Não adicione índices desnecessários.
PKs recebem um índice gratuitamente
Declarar PRIMARY KEY cria automaticamente um índice exclusivo de árvore B. O mesmo acontece com colunas UNIQUE.
Indexe as colunas de chaves estrangeiras
PostgreSQL não cria índices automaticamente no lado filho de uma FK. Sempre adicione um — sem ele, excluir um registro pai examina todos os registros filhos:
CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);Indexe as colunas usadas em WHERE
Se você filtra muito por created_at, crie um índice para essa coluna:
CREATE INDEX posts_created_at_idx ON posts(created_at DESC);
-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;Índices compostos
Para filtros com várias colunas, um índice composto pode ser muito mais rápido do que dois índices de uma coluna:
CREATE INDEX posts_author_published_idx
ON posts(author_id, published_at DESC);
-- This query uses the index for both filter and sort:
SELECT * FROM posts
WHERE author_id = 42
ORDER BY published_at DESC LIMIT 10;Regra do prefixo à esquerda
Um índice composto (a, b, c) pode atender a WHERE a = ? e WHERE a = ? AND b = ? — mas NÃO a WHERE b = ? sozinho. A ordem importa.
Índices parciais
Indexe somente as linhas que você consulta:
-- Only published posts:
CREATE INDEX posts_published_idx
ON posts(published_at DESC)
WHERE published_at IS NOT NULL;
-- Smaller index, faster lookups for the common case.Índices de expressão
Indexe o resultado de uma função aplicada a uma coluna:
CREATE INDEX users_email_lower_idx ON users(LOWER(email));
-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);Não crie índices em excesso
Regras práticas:
- Indexe a PK ✓ (automático)
- Indexe colunas UNIQUE ✓ (automático)
- Indexe colunas de chaves estrangeiras ✓
- Indexe as colunas usadas em WHERE / JOIN / ORDER BY nas suas consultas mais importantes
- Não indexe colunas com seletividade muito baixa (por exemplo, um booleano dividido em 50/50)
Meça com EXPLAIN
Antes e depois de adicionar um índice, execute EXPLAIN ANALYZE para verificar se o planejador está usando-o:
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;Resumo
Para o nosso blog: indexe as chaves estrangeiras (post_id nos comentários, author_id nas publicações e nos comentários) e (author_id, published_at DESC) nas publicações para consultas de "publicações mais recentes por usuário".
Verificação rápida
Você adicionou uma chave estrangeira orders.user_id REFERENCES users(id). Qual índice, se houver algum, deve criar?
Perguntas Frequentes
A aula “Índices para consultas comuns” é grátis?
Sim — o texto completo de “Índices para consultas comuns” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Índices para consultas comuns”?
Adicione índices para as consultas que você mais executará: por usuário, por data e por chave estrangeira, e meça o impacto com EXPLAIN. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Índices para consultas comuns”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Modelando um blog: usuários, publicações e comentários
- Escolhendo chaves e tipos
- Índices para consultas comuns
- Populando o banco de dados com dados de teste