Visualizar plan de ejecución
Abrir en CalíopeMuestra el árbol de operaciones del optimizador de consultas.
Dónde está: Editor SQL › Visual EXPLAIN
Con una consulta SELECT en el Editor SQL, pulsa Visual EXPLAIN en la barra de herramientas. Calíope pide al servidor el plan sin ejecutar la consulta —EXPLAIN FORMAT=JSON en MySQL y MariaDB, EXPLAIN (FORMAT JSON) en PostgreSQL, SET SHOWPLAN_XML en SQL Server, EXPLAIN PLAN json = 1 en ClickHouse, EXPLAIN PLAN FOR en Oracle, EXPLAIN FORMAT='tidb_json' en TiDB— y abre la pestaña Visual EXPLAIN con el árbol de nodos del plan.
También en el Editor SQLite y el Editor DuckDB, sin servidor y sin conexión: en la sección Ejecutar SQL, el botón Visual EXPLAIN pide el plan al motor del archivo —EXPLAIN QUERY PLAN en SQLite, EXPLAIN (FORMAT JSON) en DuckDB— y lo abre en esta misma pestaña. SQLite no estima filas, así que sus nodos no las llevan.
Cada nodo muestra el tipo de acceso, el índice usado (si aplica), la estimación de filas y el detalle que añade el motor: la condición, el índice elegido o el coste. El tiempo sólo aparece si el motor lo midió, y sin ejecutar la consulta no lo mide ninguno.
SQL Server
En SQL Server cada nodo lleva, en el lugar del tiempo, el coste que estima el optimizador para el nodo con todo lo que cuelga de él (EstimatedTotalSubtreeCost). No son milisegundos: son unidades del optimizador, y sirven para ver qué rama del plan pesa más.
TiDB
TiDB no tiene EXPLAIN FORMAT=JSON, así que Calíope pide EXPLAIN FORMAT='tidb_json'. Cada nodo es un operador de TiDB (TableReader, Selection, TableFullScan, IndexLookUp) y su detalle empieza por el operador y dice dónde corre: cop[tikv] es TiKV, el almacenamiento; sin anotación, el propio nodo TiDB. Un stats:pseudo en el detalle avisa de que la tabla no tiene estadísticas y las filas son una estimación por omisión: se recogen con ANALYZE en Mantenimiento de tablas. Una tabla con alias en la consulta sale con el alias, no con su nombre.
Oracle
En Oracle el plan se escribe en PLAN_TABLE, y Calíope borra sus filas en cuanto lo lee: pedir el plan es una escritura en el servidor, aunque la consulta sea un SELECT. El detalle de cada nodo lleva la operación (TABLE ACCESS FULL, INDEX RANGE SCAN), los predicados access y filter, y el coste con los bytes estimados.
ClickHouse
En ClickHouse la lectura de cada tabla sale en amarillo si la llave o un índice de salto descartó gránulos, y en rojo si los leyó todos. Su detalle empieza por los gránulos leídos de los que había («gránulos 2/123»), sigue con lo que descartó cada índice, en gránulos y partes, y termina con la estimación de filas, partes y marcas.
Navegar el árbol:
- macOS: la rueda del ratón o el pellizco de dos dedos en el trackpad para el zoom; arrastra para desplazar el lienzo.
- iPad: pellizca con dos dedos para el zoom, y arrastra con un dedo para desplazarte.
- En todas: los botones − y + de la barra, con el porcentaje en medio, y Ajustar a la ventana para encuadrar el árbol entero. Los atajos son ⌘−, ⌘+ y ⌘0.
La escala va del 18 % al 350 %, que es sitio de sobra para planes con muchos niveles de anidamiento.
Apple Vision Pro: como en el iPad, con sus gestos: pellizcar y mover para desplazar el lienzo, y pellizcar con las dos manos para el zoom. Los botones y los atajos son los mismos.
Palabras clave: explain, plan, optimizador, árbol, JSON explain, zoom, pan, navegar, pinch