Esta página describe Calíope 1.8, la versión que estoy construyendo ahora mismo. La 1.7 está en la App Store para Mac, iPad, iPhone, Apple Watch, Apple TV y Apple Vision Pro. El changelog dice en qué versión llegó cada función.

Añade un botón «Abrir en Calíope» a cada tema. Sólo funciona con la app instalada.

Visual EXPLAIN

Visualizar plan de ejecución

Muestra 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

Interpretar colores de acceso

Los colores de los nodos indican la eficiencia del acceso a datos.

Dónde está: Visual EXPLAIN › Leyenda de colores

Los nodos del Visual EXPLAIN se colorean según el tipo de acceso, y cada tarjeta lo escribe también en la fila Acceso: verde = búsqueda por clave o constante (el motor va directo a la fila, o ni siquiera lee datos), amarillo = recorrido de un tramo de un índice, naranja = recorrido de un índice entero, rojo = recorrido completo de la tabla (sin índice, el peor caso), azul = ordenación, violeta = unión de varias tablas, gris = el resto (una agregación, una subconsulta o una operación que Calíope no clasifica). La leyenda de la barra nombra los cuatro que más dicen: verde, amarillo, rojo y azul.

Un nodo rojo indica una oportunidad de optimización, generalmente agregando un índice.

Palabras clave: full scan, range, índice, colores, optimización, explain

El Visual EXPLAIN con VoiceOver

El lienzo es un dibujo que VoiceOver no puede leer: el plan se da como una lista en el orden del árbol, sangrada por profundidad.

Dónde está: Espacio de Trabajo › Herramientas › EXPLAIN

El lienzo del plan es un dibujo que VoiceOver no puede leer, así que Calíope lo ofrece como una lista. La sección Jerarquía del Plan de Ejecución tiene una fila por nodo, en el orden del árbol y sangrada por profundidad, con el nombre del nodo y su tipo de acceso, las filas estimadas, el tiempo y el detalle. El tiempo sale siempre «—», porque el plan se pide sin ejecutar la consulta.

SQL Server

En SQL Server, en el lugar del tiempo va el coste que estima el optimizador para el nodo con lo que cuelga de él.

Funciona igual en todas las plataformas.

Palabras clave: VoiceOver, accesibilidad, EXPLAIN, plan, nodos