Questa pagina descrive Calíope 1.8, la versione che sto costruendo adesso. La 1.7 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. Il changelog dice in quale versione è arrivata ogni funzione.

Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.

Visual EXPLAIN

Visualizzare il piano di esecuzione

Mostra l'albero delle operazioni dell'ottimizzatore di query.

Dove si trova: Editor SQL › Visual EXPLAIN

Con una query SELECT nell'Editor SQL, premi Visual EXPLAIN nella barra degli strumenti. Calíope chiede al server il piano senza eseguire la query —EXPLAIN FORMAT=JSON in MySQL e MariaDB, EXPLAIN (FORMAT JSON) in PostgreSQL, SET SHOWPLAN_XML in SQL Server, EXPLAIN PLAN json = 1 in ClickHouse, EXPLAIN PLAN FOR in Oracle, EXPLAIN FORMAT='tidb_json' in TiDB— e apre la tab Visual EXPLAIN con l'albero dei nodi del piano.

Anche nell’Editor SQLite e nell’Editor DuckDB, senza server e offline: nella sezione Esegui SQL, il pulsante Visual EXPLAIN chiede il piano al motore del file — EXPLAIN QUERY PLAN in SQLite, EXPLAIN (FORMAT JSON) in DuckDB — e lo apre in questa stessa scheda. SQLite non stima le righe, quindi i suoi nodi non le riportano.

Ogni nodo mostra il tipo di accesso, l'indice usato (se applicabile), la stima delle righe e il dettaglio che aggiunge il motore: la condizione, l'indice scelto o il costo. Il tempo compare solo se il motore l'ha misurato, e senza eseguire la query nessuno lo misura.

SQL Server

In SQL Server ogni nodo mostra, al posto del tempo, il costo che l’ottimizzatore stima per il nodo con tutto ciò che ne dipende (EstimatedTotalSubtreeCost). Non sono millisecondi: sono unità dell’ottimizzatore, e servono a vedere quale ramo del piano pesa di più.

TiDB

TiDB non ha EXPLAIN FORMAT=JSON, quindi Calíope chiede EXPLAIN FORMAT='tidb_json'. Ogni nodo è un operatore di TiDB (TableReader, Selection, TableFullScan, IndexLookUp), e il suo dettaglio inizia con l'operatore e dice dove viene eseguito: cop[tikv] è TiKV, lo storage; senza annotazione, il nodo TiDB stesso. Uno stats:pseudo nel dettaglio avvisa che la tabella non ha statistiche e che le righe sono una stima predefinita: si raccolgono con ANALYZE in Manutenzione tabelle. Una tabella con un alias nella query compare con l'alias, non con il suo nome.

Oracle

In Oracle il piano viene scritto in PLAN_TABLE, e Calíope ne cancella le righe appena lo legge: chiedere il piano è una scrittura sul server, anche se la query è una SELECT. Il dettaglio di ogni nodo riporta l'operazione (TABLE ACCESS FULL, INDEX RANGE SCAN), i predicati access e filter e il costo con i byte stimati.

ClickHouse

In ClickHouse la lettura di ogni tabella è gialla se la chiave o un indice di salto ha scartato dei granuli, e rossa se li ha letti tutti. Il suo dettaglio comincia con i granuli letti su quelli presenti («granuli 2/123»), prosegue con ciò che ha scartato ogni indice, in granuli e parti, e termina con la stima di righe, parti e mark.

Navigare l'albero:
- macOS: la rotella del mouse o un pizzico a due dita sul trackpad per lo zoom; trascina per spostare l'area.
- iPad: pizzica con due dita per lo zoom, e trascina con un dito per spostarti.
- Su tutti: i pulsanti − e + della barra, con la percentuale in mezzo, e Adatta alla finestra per inquadrare tutto l'albero. Le scorciatoie sono ⌘−, ⌘+ e ⌘0.

La scala va dal 18 % al 350 %, che è spazio più che sufficiente per piani con molti livelli di annidamento.

Apple Vision Pro: come sull'iPad, con i suoi gesti: pizzicare e muovere per scorrere la tela, e pizzicare con due mani per lo zoom. I pulsanti e le scorciatoie sono gli stessi.

Parole chiave: explain, piano, ottimizzatore, albero, JSON explain, zoom, pan, navigare, pinch

Interpretare i colori di accesso

I colori dei nodi indicano l'efficienza dell'accesso ai dati.

Dove si trova: Visual EXPLAIN › Legenda dei colori

I nodi del Visual EXPLAIN sono colorati in base al tipo di accesso, e ogni scheda lo scrive anche nella riga Accesso: verde = ricerca per chiave o costante (il motore va dritto alla riga, o non legge alcun dato), giallo = scansione di un intervallo di un indice, arancione = scansione di un indice intero, rosso = scansione completa della tabella (senza indice, il caso peggiore), blu = ordinamento, viola = join di più tabelle, grigio = il resto (un'aggregazione, una sottoquery o un'operazione che Calíope non classifica). La legenda nella barra nomina i quattro che dicono di più: verde, giallo, rosso e blu.

Un nodo rosso indica un'opportunità di ottimizzazione, generalmente aggiungendo un indice.

Parole chiave: full scan, range, indice, colori, ottimizzazione, explain

Visual EXPLAIN con VoiceOver

Il canvas è un disegno che VoiceOver non può leggere: il piano viene dato come elenco nell’ordine dell’albero, rientrato per profondità.

Dove si trova: Workspace › Strumenti › EXPLAIN

Il canvas del piano è un disegno che VoiceOver non può leggere, quindi Calíope lo offre come elenco. La sezione Gerarchia del Piano di Esecuzione ha una riga per nodo, nell’ordine dell’albero e rientrata per profondità, con il nome del nodo e il suo tipo di accesso, le righe stimate, il tempo e il dettaglio. Il tempo mostra sempre «—», perché il piano viene richiesto senza eseguire la query.

SQL Server

In SQL Server, al posto del tempo c’è il costo che l’ottimizzatore stima per il nodo con tutto ciò che ne dipende.

Funziona allo stesso modo su tutte le piattaforme.

Parole chiave: VoiceOver, accessibilità, EXPLAIN, piano, nodi