0Pricing
SQL Academy · Aula

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 ms

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

Custo 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=4

Opçõ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

  1. Execute EXPLAIN ANALYZE na consulta lenta
  2. Encontre o nó com o maior actual time
  3. Compare rows estimadas com actual rows
  4. Verifique se os índices estão sendo usados
  5. 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

  1. Lendo EXPLAIN e EXPLAIN ANALYZE
  2. Varreduras sequenciais vs varreduras por índice
  3. Junção por hash vs junção por intercalação vs loop aninhado
  4. Identificação e correção de consultas lentas
← Voltar para SQL Academy