0Pricing
SQL Academy · Lección

Interpretación de EXPLAIN y EXPLAIN ANALYZE

Lea el árbol del plan, comprenda la diferencia entre el coste y el tiempo real, e identifique los nodos más pesados.

Interpretación de EXPLAIN y EXPLAIN ANALYZE es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Por qué EXPLAIN?

EXPLAIN muestra la estrategia del planificador para ejecutar una consulta, sin ejecutarla. EXPLAIN ANALYZE ejecuta la consulta y también muestra los tiempos reales.

EXPLAIN básico

Muestre el plan estimado:

EXPLAIN SELECT * FROM orders WHERE user_id = 42;
--                            QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   Index Cond: (user_id = 42)

EXPLAIN ANALYZE

Ejecuta la consulta y añade los tiempos reales y el número de filas:

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 ms

Leer el árbol

Los planes son árboles. La sangría indica el nodo secundario. Los nodos secundarios se ejecutan antes que los principales.

Aggregate
  -> Hash Join
     Hash Cond: (o.user_id = u.id)
     -> Seq Scan on orders
     -> Hash
        -> Seq Scan on users

Coste frente a tiempo

La columna cost tiene DOS números: startup_cost..total_cost. Son unidades arbitrarias del planificador, no segundos. Utilice actual time para obtener valores reales.

rows = estimadas; actual rows = reales

rows es la estimación del planificador. actual rows es lo que ocurrió realmente. Si difieren mucho, las estadísticas no son correctas.

loops multiplica el tiempo

En los bucles anidados, actual time=X loops=N significa que cada iteración tardó X; el tiempo total por nodo es X×N.

Nested Loop  (actual time=0.05..2.03 rows=500)
  -> Seq Scan on orders  (actual ... loops=1)
  -> Index Scan using users_pkey  (actual time=0.01..0.01 loops=500)

BUFFERS le muestra la E/S

EXPLAIN (ANALYZE, BUFFERS) informa de los aciertos y las lecturas de búfer: la E/S que está detrás de los tiempos:

EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4

Opciones de FORMAT

Para el procesamiento programático, use JSON o YAML:

EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;

¡No use EXPLAIN ANALYZE con sentencias destructivas!

EXPLAIN ANALYZE ejecuta realmente una sentencia UPDATE/DELETE/INSERT. Envuélvala en una transacción con ROLLBACK si quiere inspeccionarla sin confirmar los cambios:

BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;

Nodos de plan comunes

  • Seq Scan — lee toda la tabla
  • Index Scan — usa un índice
  • Bitmap Heap Scan — combina varios índices
  • Hash Join / Merge Join / Nested Loop — estrategias de unión
  • Sort, Aggregate, Limit, Materialize

Flujo de trabajo para leer planes

  1. Ejecute EXPLAIN ANALYZE en la consulta lenta
  2. Busque el nodo con el valor más alto de actual time
  3. Compare rows estimadas con actual rows
  4. Compruebe si se están usando los índices
  5. Itere: añada un índice, reescriba la consulta o ejecute ANALYZE

Resumen

EXPLAIN ANALYZE es su herramienta principal de rendimiento.

  • El coste es relativo; el tiempo es real
  • Comparar las filas estimadas con las reales revela problemas con las estadísticas
  • BUFFERS muestra la E/S
  • Envuélvalas consultas destructivas en BEGIN; ... ROLLBACK

Comprobación rápida

¿Cuál es la diferencia entre EXPLAIN y EXPLAIN ANALYZE?

Preguntas frecuentes

¿La lección «Interpretación de EXPLAIN y EXPLAIN ANALYZE» es gratis?

Sí — el texto completo de «Interpretación de EXPLAIN y EXPLAIN ANALYZE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Interpretación de EXPLAIN y EXPLAIN ANALYZE»?

Lea el árbol del plan, comprenda la diferencia entre el coste y el tiempo real, e identifique los nodos más pesados. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Interpretación de EXPLAIN y EXPLAIN ANALYZE»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Interpretación de EXPLAIN y EXPLAIN ANALYZE
  2. Escaneos secuenciales frente a escaneos mediante índices
  3. Hash Join frente a Merge Join y Nested Loop
  4. Identificación y corrección de consultas lentas
← Volver a SQL Academy