Lendo EXPLAIN e EXPLAIN ANALYZE
Leia a árvore do plano, entenda o custo em comparação com o tempo real e identifique os nós mais pesados.
Lendo EXPLAIN e EXPLAIN ANALYZE é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 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.
Por que usar EXPLAIN?
EXPLAIN mostra a estratégia do planejador para executar uma consulta — sem executá-la. EXPLAIN ANALYZE executa a consulta AND mostra os tempos reais.
EXPLAIN básico
Mostre o plano estimado:
EXPLAIN SELECT * FROM orders WHERE user_id = 42;
-- QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- Index Cond: (user_id = 42)EXPLAIN ANALYZE
Executa a consulta e acrescenta os tempos reais e as contagens de linhas:
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
-- (cost=0.43..8.45 rows=5 width=120)
-- (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 msLendo a árvore
Os planos são árvores. A indentação indica o nó filho. Os filhos são executados antes dos pais.
Aggregate
-> Hash Join
Hash Cond: (o.user_id = u.id)
-> Seq Scan on orders
-> Hash
-> Seq Scan on usersCusto vs tempo
A coluna cost tem TWO números: startup_cost..total_cost. Essas são unidades arbitrárias do planejador, não segundos. Use actual time para obter valores reais.
rows = estimado; actual rows = real
rows é a estimativa do planejador. actual rows é o que realmente aconteceu. Se forem muito diferentes, as estatísticas estão incorretas.
Laços Multiplicam o Tempo
Em laços aninhados, actual time=X loops=N significa que cada iteração levou X; o total por nó é X×N.
Nested Loop (actual time=0.05..2.03 rows=500)
-> Seq Scan on orders (actual ... loops=1)
-> Index Scan using users_pkey (actual time=0.01..0.01 loops=500)BUFFERS Indica a E/S
EXPLAIN (ANALYZE, BUFFERS) informa os acertos e as leituras de buffer — a E/S por trás dos tempos medidos:
EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4Opções de FORMAT
Para processamento programático, use JSON ou YAML:
EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;Não Use EXPLAIN ANALYZE com Instruções Destrutivas
EXPLAIN ANALYZE em uma instrução UPDATE/DELETE/INSERT realmente a executa. Envolva-a em uma transação com ROLLBACK se quiser inspecioná-la sem confirmar as alterações:
BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;Nós de Plano Comuns
- Varredura sequencial — lê a tabela inteira
- Varredura de índice — usa um índice
- Varredura de heap por bitmap — combina vários índices
- Junção aninhada / Junção por hash / Junção por mesclagem — estratégias de junção
- Classificação, Agregação, Limite, Materialização
Fluxo de Leitura do Plano
- Execute EXPLAIN ANALYZE na consulta lenta
- Encontre o nó com o maior
actual time - Compare
rowsestimadas comactual rows - Verifique se os índices estão sendo usados
- Repita: adicione um índice / reescreva / execute ANALYZE
Recapitulação
EXPLAIN ANALYZE é sua principal ferramenta de desempenho.
- O custo é relativo; o tempo é real
- A diferença entre linhas estimadas e reais revela problemas nas estatísticas
- BUFFERS mostra a E/S
- Envolva consultas destrutivas em BEGIN; ... ROLLBACK
Verificação Rápida
Qual é a diferença entre EXPLAIN e EXPLAIN ANALYZE?
Perguntas Frequentes
A aula “Lendo EXPLAIN e EXPLAIN ANALYZE” é grátis?
Sim — o texto completo de “Lendo EXPLAIN e EXPLAIN ANALYZE” é 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 “Lendo EXPLAIN e EXPLAIN ANALYZE”?
Leia a árvore do plano, entenda o custo em comparação com o tempo real e identifique os nós mais pesados. 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 1 de 4.
Quanto tempo leva a aula “Lendo EXPLAIN e EXPLAIN ANALYZE”?
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
- Lendo EXPLAIN e EXPLAIN ANALYZE
- Varreduras sequenciais vs varreduras por índice
- Junção por hash vs junção por intercalação vs loop aninhado
- Identificação e correção de consultas lentas