Como ler um plano de execução sem ser DBA
A query demora dois minutos. Você olha o código e não vê nada de absurdo. E agora?
A essa altura, adivinhar é caro. O banco já sabe o que fez — e conta, se você perguntar com EXPLAIN.
O que o EXPLAIN devolve
EXPLAIN
SELECT c.nome, SUM(p.valor)
FROM clientes c
JOIN pedidos p ON p.id_cliente = c.id
GROUP BY c.nome
O que volta não é o resultado da query: é o plano — a sequência de passos que o banco pretende executar. Ele se lê de dentro para fora, ou de baixo para cima: os passos mais indentados acontecem primeiro e entregam o resultado para o passo acima.
Cada banco escreve isso com palavras um pouco diferentes, mas as peças são as mesmas.
As três coisas que importam
1. Como cada tabela é lida. Duas palavras resolvem:
- scan (varredura / sequential scan) — leu a tabela inteira
- seek / index scan — usou o índice para ir direto
Varredura não é sempre ruim: se a query precisa de 80% das linhas, ler tudo é o caminho mais rápido mesmo. Vira problema quando você pediu três linhas e o plano leu dez milhões.
2. Quantas linhas ele espera. O plano traz uma estimativa de linhas por passo. Compare com o que você sabe do negócio: se ele estima 50 linhas onde você sabe que existem 2 milhões, a estimativa está errada — e uma estimativa errada leva a um plano errado, normalmente porque as estatísticas da tabela estão desatualizadas.
3. Onde o volume explode. Percorra os passos olhando o número de linhas subir. Quase toda query lenta tem um ponto em que o volume salta de milhares para milhões — em geral um JOIN sem a chave certa, duplicando linha. Esse passo é o gargalo, e é nele que vale mexer.
O que fazer com a informação
Achado o passo caro, as saídas costumam ser poucas:
- Varredura onde deveria ter índice → falta índice, ou tem uma função em volta da coluna
- Volume explodindo num JOIN → a chave não é única do lado que você achava
- Estimativa muito longe do real → estatísticas desatualizadas
Pra lembrar
Não é preciso entender o plano inteiro. Ache o passo em que o número de linhas dispara e comece por ali.
Otimizar sem olhar o plano é trocar peça de carro no escuro. O EXPLAIN custa segundos e transforma o palpite em diagnóstico.