Ausführungsplan visualisieren
In Calíope öffnenZeigt 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