EXPLAIN

Name

EXPLAIN  --  mostra o plano de execução de uma instrução

Synopsis

EXPLAIN [ ANALYZE ] [ VERBOSE ] consulta        
  

Entradas

ANALYZE

Sinalizador para executar a consulta e mostrar os tempos reais de execução.

VERBOSE

Sinalizador para mostrar o plano de execução detalhado.

consulta

Qualquer consulta.

Saídas

NOTICE: QUERY PLAN: plano

Plano de execução explícito do servidor PostgreSQL.

EXPLAIN

Sinalizador enviado após o plano da consulta ter sido mostrado.

Descrição

Este comando mostra o plano de execução que o planejador do PostgreSQL gera para a consulta fornecida. O plano de execução mostra como a(s) tabela(s) referenciada pela consulta será varrida --- por uma varredura seqüencial, varredura do índice, etc. --- e, se várias tabelas forem referenciadas, quais algoritmos de junção serão usados para unir as tuplas requisitadas de cada tabela de entrada.

A parte mais crítica mostrada é o custo estimado da execução da consulta, que é a estimativa feita pelo planejador sobre a duração da execução da consulta (medida em unidade de acesso às páginas do disco). Na verdade dois números são mostrados: o tempo inicial anterior à primeira tupla poder ser retornada, e o tempo total para retornar todas as tuplas. Para a maioria das consultas o tempo total é o que interessa, mas em contextos como os das subconsultas EXISTS o planejador escolhe o menor tempo inicial em vez do menor tempo total (porque o executor pára após ter obtido uma linha). Além disso, se for limitado o número de tuplas a serem retornadas usando a cláusula LIMIT, o planejador efetua uma interpolação apropriada com relação aos custos finais para saber qual plano é realmente o de menor custo.

A opção ANALYZE faz com que a consulta seja realmente executada, e não apenas planejada. O tempo total de duração gasto dentro de cada parte do plano (em milissegundos) e o número total de linhas realmente retornadas são adicionados ao que é normalmente mostrado. Esta opção é útil para ver se as estimativas do planejador estão próximas da realidade.

A opção VERBOSE fornece a representação interna completa da árvore do plano, em vez de apenas o seu sumário (e a envia para o arquivo de log do postmaster, também). Geralmente esta opção é útil apenas para fazer o debug do próprio PostgreSQL.

Caution

Tenha em mente que a consulta é realmente executada quando a opção ANALYZE é usada. Embora o EXPLAIN despreze qualquer saída que o SELECT possa retornar, outros efeitos colaterais da consulta acontecem na forma usual. Para usar EXPLAIN ANALYZE em um INSERT, UPDATE, ou DELETE sem deixar que os dados sejam afetados, utilize o seguinte procedimento:

BEGIN;
EXPLAIN ANALYZE ...;
ROLLBACK;
      

Notas

Existem apenas informações esparsas sobre a utilização do otimizador na documentação do PostgreSQL. Consulte o Guia do Usuário e o Guia do Programador para obter mais informações.

Utilização

Para mostrar o plano da consulta para uma consulta simples em uma tabela com uma única coluna int4 e 128 linhas:

EXPLAIN SELECT * FROM foo;
    NOTICE:  QUERY PLAN:

Seq Scan on foo  (cost=0.00..2.28 rows=128 width=4)

EXPLAIN
    
   

Para a mesma tabela contendo um índice para dar suporte a uma condição de eqüijunção na consulta, o comando EXPLAIN mostra um plano diferente:

EXPLAIN SELECT * FROM foo WHERE i = 4;
    NOTICE:  QUERY PLAN:

Index Scan using fi on foo  (cost=0.00..0.42 rows=1 width=4)

EXPLAIN
    
   

E finalmente, para a mesma tabela contendo um índice para dar suporte a uma condição de eqüijunção na consulta, o comando EXPLAIN mostra o seguinte para uma consulta contendo uma função de agregação:

EXPLAIN SELECT sum(i) FROM foo WHERE i = 4;
    NOTICE:  QUERY PLAN:

Aggregate  (cost=0.42..0.42 rows=1 width=4)
  ->  Index Scan using fi on foo  (cost=0.00..0.42 rows=1 width=4)
    
   

Observe que os números específicos mostrados, e mesmo a estratégia selecionada para a consulta, pode variar entre versões do PostgreSQL devido a melhorias no planejador.

Compatibilidade

SQL92

Não existe o comando EXPLAIN no SQL92.