IBM PureData System for Analytics, Version 7.1

EXPLAIN

Use o comando EXPLAIN para exibir um plano de execução de consulta ou distribuição para uma consulta. Um plano de execução especifica como a tabela ou tabelas que são referenciadas pela consulta são varridas (por exemplo, por varredura sequencial simples).

Se várias tabelas forem referenciadas, o plano de execução especificará quais algoritmos de junção serão usados para reunir as tuplas necessárias de cada tabela de entrada. O plano de execução inclui uma estimativa do custo de execução da consulta, ou seja, o número de milissegundos necessário para executar a consulta.
  • O horário de início antes de a primeira tupla poder ser retornada.
  • O tempo total para retornar todas as tuplas.
Se você limitar o número de tuplas para retornar com uma cláusula de limitação, o planejador interpolará entre os custos de terminal para estimar qual plano é realmente o mais eficiente.

Sintaxe

Sintaxe do comando EXPLAIN:
EXPLAIN [VERBOSE] [DISTRIBUTION] [PLANTEXT|PLANGRAPH] <query>

Entradas

O comando EXPLAIN utiliza as seguintes entradas:
Tabela 1. Entrada EXPLAIN
Entrada Descrição
VERBOSE Exiba a representação interna integral da árvore de planejamento, em vez de apenas um resumo, e envie o plano para o arquivo de log postmaster. Essa opção é útil para depuração.
<query> A consulta para a qual o plano de execução deve ser exibido.
DISTRIBUTION Exiba o plano de distribuição. Se você usar o subcomando DISTRIBUTION, o comando EXPLAIN imprimirá a distribuição que o planejador usou em uma instrução SELECT em um comando CTAS que não especificou DISTRIBUTE ON().
PLANTEXT Exibe o plano como texto.
PLANGRAPH Exibe o plano como HTML.

Saídas

O comando EXPLAIN tem as seguintes saídas:
Tabela 2. Saídas EXPLAIN
Saída Descrição
NOTICE: query plan: plan O líder em mensagens para um plano de consulta explícito.
NOTICE: result-set distribution O líder em mensagens para uma consulta de distribuição.
EXPLAIN Mensagem que indica o final do plano de consulta explícito ou consulta de distribuição.

Privilégios

Esse comando não requer privilégios especiais.

Uso

A seguir, uso de amostra.
  • Exiba um plano de consulta para uma consulta simples em uma tabela com uma coluna única coluna int4 e 128 linhas:
    MYDB.SCH1(USER)=> EXPLAIN SELECT * FROM foo;
           NOTICE:  QUERY PLAN:
       Seq Scan on foo  (cost=0.00..2.28 rows=128 width=4)
       EXPLAIN
  • Exiba um plano de consulta para uma junção entre as tabelas emp e grp:
    MYDB.SCH1(USER)=> EXPLAIN SELECT emp.* FROM emp,grp WHERE 
    emp.id=grp.grp_id; 
       NOTICE: QUERY PLAN: 
       Hash Join (cost=0.01..0.04 rows=10000 width=28)
    -> Seq Scan on emp (cost=0.00..0.01 rows=1000 width=28)
    -> Hash (cost=0.01..0.01 rows=1000 width=4)
    -> Seq Scan on grp (cost=0.00..0.01 rows=1000 width=4) 
       EXPLAIN
  • Exiba um plano de consulta para TPHC Consulta 3:
    MYDB.SCH1(USER)=> EXPLAIN SELECT
           l_orderkey, 
           sum(l_extendedprice * (1 - l_discount)) as revenue, 
           o_orderdate, 
           o_shippriority 
       FROM    
           customer, 
           orders, 
           lineitem 
       WHERE 
           c_mktsegment = 'BUILDING' 
           and c_custkey = o_custkey 
           and l_orderkey = o_orderkey 
           and o_orderdate < date '1995-03-15' 
           and l_shipdate > date '1995-03-15'
       GROUP BY 
           l_orderkey, 
           o_orderdate, 
           o_shippriority 
       ORDER BY 
           revenue desc, 
           o_orderdate 
       LIMIT 10;
    NOTICE: QUERY PLAN:
    Limit (cost=315799480130.29..315799480130.29 rows=10 width=28)
    -> Sort (cost=315799480130.29..315799480130.29 rows=360899981912
    width=28)
         -> Aggregate (cost=19476.76..112854066.90 rows=360899981912
    width=28)
            -> Group (cost=19476.76..72822.55 rows=360899981912 width=28)
               -> Hash Join (cost=19476.76..43432.67 rows=31349208 width=28)
                  -> Seq Scan on lineitem (cost=0.00..17842.17 rows=322475815
    width=20)
               -> Hash (cost=19476.76..19476.76 rows=14582120 width=12)
                  -> Hash Join (cost=1347.66..19476.76 rows=14582120
    width=12)
                     -> Seq Scan on orders (cost=0.00..3606.62
    rows=72910603 width=16)
                     -> Hash (cost=550.60..550.60 rows=3000000 width=4)
                        -> Seq Scan on customer (cost=0.00..550.60
    rows=3000000 width=4)
    EXPLAIN
  • Exiba a distribuição de uma instrução SELECT em um comando CTAS:
       dev(admin)=> EXPLAIN DISTRIBUTION SELECT COUNT(*),grp FROM emp 
    GROUP BY grp;
       NOTICE:  Result-set distribution (for "CREATE TABLE AS")
       Distributed on hash: "grp"
       EXPLAIN


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28