Trucos con EXPLAIN PLAN que uso para diagnosticar consultas lentas

David Carrero
12 de Agosto del 2026

Con tantos hilos por aquí de consultas que «van lentas y no sé por qué», van algunos trucos con EXPLAIN PLAN que uso habitualmente para diagnosticar antes de tocar nada.

Generar y ver el plan de forma legible:

EXPLAIN PLAN FOR
SELECT * FROM pedidos WHERE cliente_id = 123;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

DBMS_XPLAN.DISPLAY da un formato mucho más legible que consultar PLAN_TABLE a mano, con la jerarquía de operaciones bien indentada.

Ver el plan real de una consulta ya ejecutada (no solo el estimado, sino el que realmente usó Oracle, con estadísticas reales de filas procesadas):

SELECT * FROM pedidos WHERE cliente_id = 123;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));

Esto es clave cuando el plan estimado (EXPLAIN PLAN) dice una cosa pero la consulta va lenta de verdad: comparando E-Rows (filas estimadas) contra A-Rows (filas reales) puedes ver exactamente en qué paso el optimizador se equivocó en su estimación, que suele ser la causa raíz de un mal plan.

Fijarse en el Cost, pero no obsesionarse con él. El Cost es una unidad interna del optimizador, útil para comparar dos planes de la misma consulta entre sí, pero no es una medida de tiempo real ni comparable entre consultas distintas.

Buscar operaciones caras típicas: NESTED LOOPS con muchas filas en el lado interno, FULL TABLE SCAN en tablas grandes cuando esperabas un acceso por índice, o SORT (aggregate) con volúmenes altos suelen ser los puntos donde merece la pena mirar primero.

¿Vosotros miráis el plan de ejecución habitualmente, o tirais más de intuición y prueba/error con índices?

David Carrero


Bruno C.
12 de Agosto del 2026

Complemento rápido, para cuando no te apetece montar todo el DBMS_XPLAN a mano: si trabajas desde SQL*Plus o SQL Developer, AUTOTRACE da el plan y las estadísticas de ejecución en un solo paso:

SET AUTOTRACE ON;
SELECT * FROM pedidos WHERE cliente_id = 123;

Tras ejecutar la consulta, muestra automáticamente el plan de ejecución y estadísticas como número de lecturas lógicas y físicas, sin tener que acordarte de la sintaxis de DBMS_XPLAN.DISPLAY_CURSOR. Es más rápido para una comprobación puntual mientras trabajas, aunque para diagnósticos serios en profundidad sigo prefiriendo DBMS_XPLAN con ALLSTATS LAST porque da más detalle real de ejecución, no solo estimaciones.

Bruno C.