EXPLAIN [ VERBOSE ] consulta |
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.
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.
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.