EXPLAIN

Nombre

EXPLAIN  --  Muestra el plan de ejecución de la sentencia

Synopsis

EXPLAIN [ VERBOSE ] consulta        
  

Entradas

VERBOSE

Bandera para mostrar el plan detallado de la consulta.

consulta

Cualquier consulta.

Salidas

NOTICE: QUERY PLAN: plan

Plan de consulta explícito del backend Postgres.

EXPLAIN

Bandera enviada luego de mostrarse el plan.

Descripción

Este comando muestra el plan de ejecución que el planificador Postgres genera para la consulta dada. El plan de ejecución muestra la manera en que serán escaneadas las tablas referenciadas --- ya sea escaneo secuencial plano, escaneo por índice, etc. --- y si se referencian varias tablas, los algoritmos de unión que serán utilizados para agrupar las tuplas requeridas para cada tabla de entrada.

La parte más critica de la presentación es el costo estimado de ejecución de la consulta, que es la suposición del planificador sobre el tiempo que tomará correr la consulta (medido en unidades de captura de páginas de disco). En realidad se muestran dos números: el tiempo inicial que toma devolverse la primer tupla, y el tiempo total para devolver todas las tuplas. Para la mayoría de las consultas lo que importa es el tiempo total, pero en algunos casos como una sub-consulta EXISTS el planificador escogerá el menor tiempo inicial en vez del menor tiempo total (ya que en todo caso el ejecutor se detendrá después de obtener la primer tupla). También, si Ud. limita el número de tuplas a devolver con una cláusula LIMIT, el planificador realiza una interpolación apropiada entre los dos costos finales para estimar cuál de los planes es realmente el menos costoso.

La opción VERBOSE emite la representación interna completa del árbol del plan, en vez de un resumen (y lo envía al archivo log del postmaster también). Usualmente esta opción es únicamente útil para la corrección de errores (debug) de Postgres.

Notas

Existe escasa documentación en Postgres con respecto a la utilización por parte del optimizador de la información de costos. Información general sobre la estimación de costos para la optimización de las consultas puede encontrarse en libros de textos de bases de datos. Refiérase a los capítulos sobre índices y el optimizador genético de consultas de la Guía del Programador para mayor información.

Uso

Para mostrar un plan de consulta para una consulta simple sobre una tabla con una única columna de tipo int4 y 128 filas:

EXPLAIN SELECT * FROM foo;
    NOTICE:  QUERY PLAN:

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

EXPLAIN
    
   

Para la misma tabla con un índice para lograr una condición equijoin en la consulta, EXPLAIN mostrará un plan distinto:

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
    
   

Y para terminar, para la misma tabla con un índice para lograr una condición equijoin en la consulta, EXPLAIN mostrará lo siguiente para una consulta que utilice una función de agregación:

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)
    
   

Nótese que los números específicos mostrados, y aún la estrategia de consulta seleccionada, pueden variar entre dos versiones de Postgres debido al mejoramiento del planificador.

Compatibilidad

SQL92

No existe una sentencia EXPLAIN definida en SQL92.