Diese Seite beschreibt Calíope 1.8, die Version, die ich gerade baue. Die 1.7 ist im App Store für Mac, iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro. Das Changelog sagt, in welcher Version jede Funktion kam.

Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.

Visual EXPLAIN

Ausführungsplan visualisieren

Zeigt den Operationsbaum des Query-Optimierers.

Wo es zu finden ist: SQL-Editor › Visual EXPLAIN

Klick bei einer SELECT-Query im SQL-Editor auf Visual EXPLAIN in der Werkzeugleiste. Calíope fragt den Server nach dem Plan, ohne die Abfrage auszuführen —EXPLAIN FORMAT=JSON bei MySQL und MariaDB, EXPLAIN (FORMAT JSON) bei PostgreSQL, SET SHOWPLAN_XML bei SQL Server, EXPLAIN PLAN json = 1 bei ClickHouse, EXPLAIN PLAN FOR bei Oracle, EXPLAIN FORMAT='tidb_json' bei TiDB— und öffnet den Tab Visual EXPLAIN mit dem Knotenbaum des Plans.

Auch im SQLite-Editor und im DuckDB-Editor, ohne Server und offline: Im Abschnitt SQL ausführen fragt die Schaltfläche Visual EXPLAIN die Engine der Datei nach dem Plan – EXPLAIN QUERY PLAN in SQLite, EXPLAIN (FORMAT JSON) in DuckDB – und öffnet ihn in diesem Tab. SQLite schätzt keine Zeilen, deshalb tragen seine Knoten keine.

Jeder Knoten zeigt den Zugriffstyp, den verwendeten Index (falls zutreffend), die geschätzte Zeilenzahl und das Detail, das die Engine hinzufügt: die Bedingung, den gewählten Index oder die Kosten. Eine Zeit erscheint nur, wenn die Engine sie gemessen hat, und ohne die Abfrage auszuführen misst sie keine.

SQL Server

In SQL Server zeigt jeder Knoten anstelle der Zeit die Kosten, die der Optimierer für den Knoten samt allem darunter schätzt (EstimatedTotalSubtreeCost). Das sind keine Millisekunden, sondern Einheiten des Optimierers, mit denen man sieht, welcher Zweig des Plans am meisten wiegt.

TiDB

TiDB hat kein EXPLAIN FORMAT=JSON, daher fragt Calíope EXPLAIN FORMAT='tidb_json' an. Jeder Knoten ist ein TiDB-Operator (TableReader, Selection, TableFullScan, IndexLookUp), und sein Detail beginnt mit dem Operator und sagt, wo er läuft: cop[tikv] ist TiKV, der Speicher; ohne Anmerkung der TiDB-Knoten selbst. Ein stats:pseudo im Detail warnt, dass die Tabelle keine Statistiken hat und die Zeilen eine Standardschätzung sind: Du sammelst sie mit ANALYZE in Tabellenwartung. Eine Tabelle mit Alias in der Query erscheint unter dem Alias, nicht unter ihrem Namen.

Oracle

Bei Oracle wird der Plan in PLAN_TABLE geschrieben, und Calíope löscht seine Zeilen, sobald es ihn gelesen hat: Den Plan abzufragen ist ein Schreibvorgang auf dem Server, auch wenn die Abfrage ein SELECT ist. Das Detail jedes Knotens enthält die Operation (TABLE ACCESS FULL, INDEX RANGE SCAN), die Prädikate access und filter und die Kosten mit den geschätzten Bytes.

ClickHouse

Bei ClickHouse ist das Lesen jeder Tabelle gelb, wenn der Schlüssel oder ein Data-Skipping-Index Granulen übersprungen hat, und rot, wenn alle gelesen wurden. Das Detail beginnt mit den gelesenen von den vorhandenen Granulen („Granulen 2/123“), nennt dann, was jeder Index übersprungen hat, in Granulen und Teilen, und endet mit der Schätzung von Zeilen, Teilen und Marken.

Den Baum navigieren:
- macOS: das Mausrad oder eine Zwei-Finger-Pinch-Geste auf dem Trackpad zum Zoomen; ziehen, um den Canvas zu verschieben.
- iPad: mit zwei Fingern aufziehen zum Zoomen und mit einem Finger ziehen zum Verschieben.
- Überall: die Schaltflächen − und + in der Leiste, mit dem Prozentwert dazwischen, und An Fenster anpassen, um den ganzen Baum einzurahmen. Die Kürzel sind ⌘−, ⌘+ und ⌘0.

Die Skalierung reicht von 18 % bis 350 % — reichlich Platz für Pläne mit vielen Verschachtelungsebenen.

Apple Vision Pro: wie auf dem iPad, mit eigenen Gesten: zusammenführen und bewegen zum Verschieben der Ansicht, und mit beiden Händen zusammenziehen zum Zoomen. Tasten und Kurzbefehle sind dieselben.

Stichwörter: explain, Plan, Optimierer, Baum, JSON EXPLAIN, Zoom, Pan, navigieren, Pinch

Zugriffsfarben interpretieren

Die Farben der Knoten zeigen die Effizienz des Datenzugriffs an.

Wo es zu finden ist: Visual EXPLAIN › Farblegende

Die Knoten des Visual EXPLAIN werden nach Zugriffstyp eingefärbt, und jede Karte schreibt ihn auch in ihre Zeile Zugriff: grün = Schlüsselsuche oder Konstante (die Engine geht direkt zur Zeile oder liest gar keine Daten), gelb = Durchlauf eines Bereichs eines Index, orange = Durchlauf eines ganzen Index, rot = vollständiger Tabellenscan (ohne Index, der schlechteste Fall), blau = Sortierung, violett = Verknüpfung mehrerer Tabellen, grau = der Rest (eine Aggregation, eine Unterabfrage oder eine Operation, die Calíope nicht einordnet). Die Legende in der Leiste nennt die vier aussagekräftigsten: grün, gelb, rot und blau.

Ein roter Knoten weist auf eine Optimierungsmöglichkeit hin, meist durch Hinzufügen eines Index.

Stichwörter: Full Scan, Range, Index, Farben, Optimierung, explain

Visual EXPLAIN mit VoiceOver

Die Arbeitsfläche ist eine Zeichnung, die VoiceOver nicht lesen kann: Der Plan wird als Liste in Baumreihenfolge gegeben, nach Tiefe eingerückt.

Wo es zu finden ist: Workspace › Werkzeuge › EXPLAIN

Die Arbeitsfläche des Plans ist eine Zeichnung, die VoiceOver nicht lesen kann, deshalb bietet Calíope sie als Liste an. Der Abschnitt Hierarchie des Ausführungsplans hat eine Zeile pro Knoten, in der Reihenfolge des Baums und nach Tiefe eingerückt, mit dem Namen des Knotens und seiner Zugriffsart, den geschätzten Zeilen, der Zeit und dem Detail. Die Zeit lautet immer „—“, weil der Plan angefordert wird, ohne die Abfrage auszuführen.

SQL Server

In SQL Server stehen anstelle der Zeit die Kosten, die der Optimierer für den Knoten samt allem darunter schätzt.

Es funktioniert auf allen Plattformen gleich.

Stichwörter: VoiceOver, Bedienungshilfen, EXPLAIN, Plan, Knoten