

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# O plano de consulta EXPLAIN
<a name="explain-query-plan"></a>

O PostgreSQL fornece `EXPLAIN` as opções `EXPLAIN ANALYZE` e para retornar planos de consulta com detalhes sobre como a consulta será executada.

## A declaração EXPLAIN
<a name="explain"></a>

A `EXPLAIN` instrução retorna o plano de consulta que o planejador do PostgreSQL gera para uma determinada instrução. O plano de consulta mostra o seguinte:
+ Como as tabelas envolvidas em uma declaração serão digitalizadas (por exemplo, por varredura de índice ou varredura sequencial)
+ Como várias tabelas serão unidas (por exemplo, junção de hash, junção de mesclagem ou junção de loop aninhada)

Compreender o plano é fundamental para melhorar o desempenho da consulta. Depois de entender o plano, você pode se concentrar em onde a consulta está demorando muito e tomar medidas para reduzir o tempo.

## Usando EXPLAIN ANALYZE
<a name="explain-analyze"></a>

No PostgreSQL`EXPLAIN`, só gerará um plano para a instrução dada. Se você adicionar a `ANALYZE` palavra-chave, `EXPLAIN` retornará o plano, executará a consulta e mostrará o tempo de execução real e a contagem de linhas para cada etapa. Isso é indispensável para analisar o desempenho da consulta.

**Importante**  
Ao usar`EXPLAIN ANALYZE`, tenha cuidado com `INSERT``UPDATE`, `DELETE` e.

## Como ler o plano de consulta EXPLAIN
<a name="read"></a>

*Um plano de consulta do PostgreSQL é uma estrutura em árvore que consiste em vários nós.* O plano de `EXPLAIN` consulta mostra as etapas que o mecanismo de banco de dados usa para executar uma consulta. O plano de consulta fornece as seguintes informações:
+ O tipo de operação realizada, como varreduras sequenciais, varreduras de índice ou junções de loops aninhados.
+ Um rótulo, como`Seq Scan`, ou `Index Scan``Nested Loop`, para descrever a operação que está sendo executada.
+ O nome da tabela ou índice que está sendo processado pela consulta.
+ Colunas de custo e linha com informações sobre o custo estimado em uma unidade arbitrária de computação e o número de linhas processadas.
+ A condição do filtro de qualquer filtro aplicado na operação, como a `where` condição.
+ Uma representação visual das etapas, com cada operação mostrada como um nó e setas conectando as operações. A ordem das operações é mostrada da esquerda para a direita, com as operações anteriores alimentando as operações posteriores.

A captura de tela a seguir mostra o plano de consulta para uma varredura sequencial.



![\[Plano de consulta mostrado na guia Saída de dados no pgAdmin.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/postgresql-query-tuning/images/query-plan.png)


A estimativa de custo `(cost=0.00..32.60 rows=2260 width=8)` significa que o PostgreSQL espera que a consulta exija 32,60 unidades de computação para retornar os resultados.

O `0.00` valor é o custo pelo qual esse nó pode começar a trabalhar (nesse caso, o tempo de inicialização da consulta). O `rows` valor é o número estimado de linhas que a varredura sequencial retornará. O `width` valor é o tamanho estimado em bytes das linhas retornadas.

Como o exemplo mostra `EXPLAIN` com a `ANALYZE` opção, a consulta foi executada e as informações de tempo foram capturadas. O resultado `(actual time=0.120..0.121 rows=1 loops=1)` significa o seguinte:
+ A varredura sequencial foi executada uma vez (o `loops` valor).
+ A digitalização retornou uma linha.
+ O tempo real foi de 0,12 milissegundos.