EXPLICAR
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.
Sintaxis
Sintaxis para el comando EXPLAIN:
EXPLAIN [VERBOSE] [DISTRIBUTION] [PLANTEXT|PLANGRAPH] <query>Entradas
El comando EXPLAIN toma las siguientes entradas:
| 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. |
| DISTRIBUCIÓN | 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. |
Resultados
El comando EXPLAIN tiene las siguientes salidas:
| Resultado | 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
Se proporciona el siguiente 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