EXPLAIN y EXPLAIN ANALYZE
¿Qué hace EXPLAIN ANALYZE en PostgreSQL?
EXPLAIN muestra cómo planea PostgreSQL ejecutar una consulta; EXPLAIN ANALYZE además la ejecuta e informa el número real de filas y los tiempos de cada paso.
EXPLAIN imprime la estrategia de ejecución que eligió el planificador para una sentencia: qué tablas se leen y cómo, qué métodos de join se usan, y el costo y el número de filas estimados en cada paso. Con la opción ANALYZE, PostgreSQL ejecuta realmente la sentencia y agrega el tiempo y el número de filas reales junto a las estimaciones.
Comparar las filas estimadas con las reales es la forma más rápida de detectar estadísticas desactualizadas o una mala elección del método de acceso. La opción BUFFERS agrega cuántas páginas se encontraron en la memoria compartida y cuántas hubo que leer. Como EXPLAIN ANALYZE ejecuta realmente la sentencia, envuelve las sentencias que modifican datos en BEGIN y ROLLBACK cuando solo quieras inspeccionarlas.
Ejemplo
El ejemplo busca una dirección de correo electrónico en una tabla que no tiene índice en esa columna. La salida muestra un Seq Scan con el número de filas estimado y real, los tiempos y las estadísticas de búferes.
CREATE TABLE users (id int PRIMARY KEY, email text);
INSERT INTO users
SELECT g, 'user' || g || '@example.com' FROM generate_series(1, 50000) AS g;
ANALYZE users;
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM users WHERE email = 'user42@example.com';SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.
Fuentes
Documentación oficial de PostgreSQL (en inglés).