Entender a instrução EXPLAIN
Use a instrução EXPLAIN para exibir o plano de execução da consulta. EXPLAIN pode ser usado com qualquer instrução SELECT, INSERT, UPDATE, DELETE, VALUES, EXECUTE, DECLARE ou CREATE TABLE AS.
EXPLAIN exibe o plano de execução da consulta, permitindo que você entenda como o PostgreSQL: executa uma instrução, se os índices são usados, como as tabelas são unidas e o custo de noção de uma consulta.
A sintaxe de EXPLAIN é:
EXPLAIN [ (parameter [, ...] ) ] statement
Os parâmetros opcionais são:
- ANALISAR
- DETALHADO
- CUSTOS
- BUFFERS
- FORMATO
Por exemplo:
EXPLAIN ANALYZE SELECT * FROM category ORDER BY cat_id;
Esta consulta simples retorna as seguintes informações:
ANALISAR
Essa opção executa a instrução e retorna o plano de consulta. A saída da instrução é descartada, mas a instrução ainda é executada. Você pode combinar as instruções ROLLBACK e EXPLAIN ANALYZE para evitar que as alterações sejam aplicadas com uma consulta que faça alterações no banco de dados, como INSERT, UPDATE ou DELETE. Por exemplo:
BEGIN;
> EXPLAIN ANALYZE INSERT INTO Animal
> (ani_id, name, weight_kg, cat_id, enc_id)
> VALUES (28, 'Robin Robin', 0.5, 1, 2);
ROLLBACK;
DETALHADO
Exibe informações adicionais, incluindo:
- a lista de colunas de saída para cada nó na árvore de planos
- os nomes de tabela e função qualificados para esquema
- os nomes de variáveis em expressões junto com o alias de tabela
- o nome de cada gatilho para o qual as estatísticas são exibidas
CUSTOS
Inclui o custo de inicialização estimado e o custo total, além do número estimado de linhas e da largura estimada de cada linha.
BUFFERS
Os buffers só podem ser usados com a opção ANALYZE. O PostgreSQL usa um cache LRU (menos usado recentemente) para armazenar dados usados com frequência na memória. Os buffers exibem a quantidade de dados provenientes de um cache e quanto é recuperado do disco. Exibe o número de ocorrências, leituras e gravações de blocos compartilhados, locais e temporários. Os dados fornecidos pelo BUFFERS podem ajudar a entender partes intensivas de E/S de uma consulta.
FORMATO
Define o formato de saída. XML, JSON ou YAML contêm as mesmas informações que TEXT, mas em um formato mais fácil de usar para programas. TEXT é o padrão.