IBM PureData System for Analytics, Version 7.1

EXPLAIN

Utilice el comando EXPLAIN para mostrar un plan de ejecución de consultas o la distribución para una consulta. Un plan de ejecución especifica cómo se exploran la tabla o las tablas a las que la consulta hace referencia (por ejemplo, mediante una exploración secuencial sencilla).

Si se hace referencia a varias tablas, el plan de ejecución especifica qué algoritmos de unión se utilizan para reunir las tuplas necesarias de cada tabla de entrada. El plan de ejecución incluye una estimación del coste de la ejecución de las consultas; es decir, el número de milisegundos necesarios para ejecutar la consulta.
  • Se puede devolver la hora de inicio antes de la primera tupla.
  • El tiempo total para devolver todas las tuplas.
Si se limita el número de tuplas que devolver mediante una cláusula de límite, el planificador interpola entre los costes del punto final para calcular qué plan es el más eficaz realmente.

Sintaxis

Sintaxis para el comando EXPLAIN:
EXPLAIN [VERBOSE] [DISTRIBUTION] [PLANTEXT|PLANGRAPH] <query>

Entradas

El comando EXPLAIN toma las siguientes entradas:
Tabla 1. Entrada de EXPLAIN
Entrada Descripción
VERBOSE Muestre la representación interna completa del árbol del plan, en lugar de solo un resumen, y envíe el plan al archivo de registro del postmaster. Esta opción es útil para la depuración.
<query> La consulta para la que se va a mostrar el plan de ejecución.
DISTRIBUTION Muestre el plan de distribución. Si utiliza el subcomando DISTRIBUTION, el comando EXPLAIN imprime la distribución que el planificador utiliza en la sentencia SELECT de un comando CTAS que no ha especificado DISTRIBUTE ON().
PLANTEXT Muestra el plan como texto.
PLANGRAPH Muestra el plan como HTML.

Salidas

El comando EXPLAIN tiene las siguientes salidas:
Tabla 2. Salidas de EXPLAIN
Salida Descripción
NOTICE: query plan: plan Mensaje inicial correspondiente a un plan de consulta explícito.
NOTICE: result-set distribution Mensaje inicial correspondiente a una consulta de distribución.
EXPLAIN Mensaje que indica el final del plan de consulta explícito o de la consulta de distribución.

Privilegios

Este comando no requiere privilegios especiales.

Uso

A continuación, se proporciona un uso de muestra.
  • Mmostrar un plan de consulta para una consulta simple de una tabla con una única columna int4 y 128 filas:
    MYDB.SCH1(USER)=> EXPLAIN SELECT * FROM foo;
           NOTICE:  QUERY PLAN:
       Seq Scan on foo  (cost=0.00..2.28 rows=128 width=4)
       EXPLAIN
  • Mostrar un plan de consulta para una unión entre las tablas emp y 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
  • Mostrar un plan de consulta para TPHC Query 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
  • Mostrar la distribución desde una sentencia SELECT de un 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