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 msLeer 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 usersCoste 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=4Opciones 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
- Ejecute EXPLAIN ANALYZE en la consulta lenta
- Busque el nodo con el valor más alto de
actual time - Compare
rowsestimadas conactual rows - Compruebe si se están usando los índices
- 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
- Interpretación de EXPLAIN y EXPLAIN ANALYZE
- Escaneos secuenciales frente a escaneos mediante índices
- Hash Join frente a Merge Join y Nested Loop
- Identificación y corrección de consultas lentas