Contenido de esta guía
Qué significa
EXPLAIN pide al motor que describa el plan preparado para una sentencia. Ese plan indica, entre otras cosas, cómo espera leer las tablas, qué índices puede utilizar y en qué orden combinará las operaciones.
No responde si una consulta es “buena” o “mala” con una sola cifra. Es una herramienta de diagnóstico: ayuda a formular preguntas concretas sobre el trabajo que realizará la base de datos.
Cuándo conviene utilizarlo
Úsalo cuando una consulta tarda más de lo esperado, cuando quieres comprobar si un índice participa o cuando una modificación de SQL cambia mucho el comportamiento. Primero confirma que la consulta devuelve los datos correctos; después investiga el plan.
Orden recomendado: mide el problema, observa el plan, formula una hipótesis, cambia una sola cosa y vuelve a medir. No crees índices únicamente porque aparezca una lectura completa.
Sintaxis básica
EXPLAIN
SELECT columnas
FROM tabla
WHERE condicion;EXPLAIN QUERY PLAN
SELECT columnas
FROM tabla
WHERE condicion;El nombre y el formato varían entre motores. PostgreSQL ofrece opciones como ANALYZE, que ejecuta la sentencia y añade mediciones reales. SQLite separa EXPLAIN, de bajo nivel, y EXPLAIN QUERY PLAN, que ofrece una descripción de más alto nivel.
Ejemplo guiado
Queremos listar los productos con stock disponible, del mayor al menor stock:
SELECT id, nombre, stock
FROM productos
WHERE stock > 0
ORDER BY stock DESC;| id | nombre | stock |
|---|---|---|
| 9 | Cable USB-C | 30 |
| 1 | Ratón | 18 |
| 5 | Auriculares | 11 |
| 8 | Disco SSD | 9 |
| 2 | Teclado | 7 |
| 3 | Monitor 24 | 4 |
| 7 | Monitor 27 | 2 |
En SQLite podemos anteponer EXPLAIN QUERY PLAN:
EXPLAIN QUERY PLAN
SELECT id, nombre, stock
FROM productos
WHERE stock > 0
ORDER BY stock DESC;| detalle |
|---|
| SCAN productos |
| USE TEMP B-TREE FOR ORDER BY |
Cómo leerlo sin memorizar códigos
SCAN productosindica que SQLite recorre la tabla para evaluar el filtro.- La segunda línea indica que necesita una estructura temporal para ordenar.
- Eso no demuestra por sí solo que haya un problema: la tabla educativa tiene muy pocas filas.
- En una base real habría que medir con datos representativos antes de crear un índice.
EXPLAIN y EXPLAIN ANALYZE no son lo mismo
Un plan estimado describe la estrategia prevista. En PostgreSQL, EXPLAIN ANALYZE ejecuta la sentencia y muestra tiempos y filas observadas. Esa diferencia es importante: una estimación puede desviarse de la realidad.
Ejecutar ANALYZE sobre una escritura sin cuidado
EXPLAIN ANALYZE
DELETE FROM pedidos
WHERE estado = 'cancelado';En PostgreSQL, EXPLAIN ANALYZE ejecuta la sentencia. Con INSERT, UPDATE o DELETE puede modificar datos. Utiliza una transacción que puedas revertir o trabaja en un entorno seguro.
Comprueba lo aprendido
Compara el plan antes y después de un índice
En una copia de práctica, observa el plan de los pedidos del cliente 1, crea un índice compuesto y vuelve a observarlo. No concluyas que el índice mejora producción: aquí solo comprobarás que el plan puede cambiar.
EXPLAIN QUERY PLAN a la consulta.cliente_id y el orden usa fecha, id.idx_pedidos_cliente_fecha sobre esas tres columnas.Solución razonada
EXPLAIN QUERY PLAN
SELECT id, fecha, total
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha, id;
CREATE INDEX idx_pedidos_cliente_fecha
ON pedidos (cliente_id, fecha, id);
EXPLAIN QUERY PLAN
SELECT id, fecha, total
FROM pedidos
WHERE cliente_id = 1
ORDER BY fecha, id;| detail |
|---|
| SCAN pedidos |
| USE TEMP B-TREE FOR ORDER BY |
| detail |
|---|
| SEARCH pedidos USING INDEX idx_pedidos_cliente_fecha (cliente_id=?) |
En esta versión de SQLite, el segundo plan localiza las filas mediante el índice y ya las recorre en el orden solicitado. El texto exacto del plan puede cambiar entre versiones; registra la idea, no memorices la frase.
Diferencias entre motores
Los planes, nombres de operaciones y costes no son comparables directamente entre PostgreSQL, SQLite, MySQL, SQL Server u Oracle. Incluso el formato puede cambiar entre versiones. Aprende a reconocer ideas —lectura de tabla, acceso por índice, ordenación y unión— y consulta la documentación del motor concreto.
Qué debes recordar
EXPLAINdescribe una estrategia, no entrega una recomendación automática.- Un recorrido completo puede ser correcto para una tabla pequeña.
EXPLAIN ANALYZEpuede ejecutar la sentencia; úsalo con cuidado.- Compara mediciones antes y después de cada cambio.
Conceptos relacionados
Fuentes técnicas consultadas
Se utilizaron para comprobar el propósito, las opciones y las advertencias. La explicación y los ejemplos son originales.