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.