このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

実行計画ビューア

実行計画を可視化する

クエリーオプティマイザの操作ツリーを表示します。

場所: SQLエディタ › 実行計画ビューア

SQLエディタでSELECTクエリーを開き、ツールバーの「実行計画ビューア」をクリックします。Calíopeはクエリーを実行せずにサーバに実行計画を求め(MySQLとMariaDBではEXPLAIN FORMAT=JSON、PostgreSQLではEXPLAIN (FORMAT JSON)、SQL ServerではSET SHOWPLAN_XML、ClickHouseではEXPLAIN PLAN json = 1、OracleではEXPLAIN PLAN FOR、TiDBではEXPLAIN FORMAT='tidb_json')、実行計画のノードツリーを表示する「実行計画ビューア」タブを開きます。

各ノードには、アクセスの種類、使われたインデックス(あれば)、推定行数、そしてエンジンが加える詳細(条件、選ばれたインデックス、コスト)が表示されます。時間はエンジンが測定した場合だけ表示され、クエリーを実行しなければどのエンジンも測定しません。

TiDB

TiDBにはEXPLAIN FORMAT=JSONがないため、CalíopeはEXPLAIN FORMAT='tidb_json'を求めます。各ノードはTiDBの演算子(TableReader、Selection、TableFullScan、IndexLookUp)で、詳細は演算子から始まり、どこで実行されるかを示します:cop[tikv]はストレージ層のTiKV、注記がなければTiDBノード自身です。詳細にstats:pseudoがあれば、テーブルに統計情報がなく、行数はデフォルトの推定値だという警告です:「テーブルメンテナンス」のANALYZEで収集してください。クエリーで別名を付けたテーブルは、名前ではなく別名で表示されます。

Oracle

Oracleでは実行計画はPLAN_TABLEに書き込まれ、Calíopeは読み取ったらすぐにその行を削除します:クエリーがSELECTでも、実行計画を求めることはサーバへの書き込みです。各ノードの詳細には、操作(TABLE ACCESS FULL、INDEX RANGE SCAN)、accessとfilterの述語、そしてコストと推定バイト数が入ります。

ClickHouse

ClickHouseでは、テーブルの読み取りは、キーやデータスキップインデックスがグラニュールを飛ばした場合は黄色、すべて読んだ場合は赤になります。詳細は読んだグラニュールと全体の数(「グラニュール2/123」)から始まり、各インデックスが飛ばした分をグラニュールとパートで示し、最後に行、パート、マークの推定値が続きます。

ツリーの操作:
- macOS:マウスホイールかトラックパッドの2本指のピンチでズームし、ドラッグでキャンバスを移動します。
- iPad:2本指でピンチしてズームし、1本指でドラッグして移動します。
- すべてで:ツールバーの−と+のボタン(間に「パーセント」)と、ツリー全体を収める「ウインドウに合わせる」。ショートカットは⌘−、⌘+、⌘0です。

倍率は18 %から350 %までで、入れ子が何段もある実行計画にも十分な幅があります。

Apple Vision Pro:iPadと同じで、専用のジェスチャがあります:「ピンチして動かす」でキャンバスを移動し、「両手でピンチ」でズームします。ボタンとショートカットは同じです。

キーワード: EXPLAIN、実行計画、オプティマイザ、ツリー、JSON EXPLAIN、ズーム、パン、ナビゲーション、ピンチ

アクセスの色の読み方

ノードの色はデータアクセスの効率を示します。

場所: 実行計画ビューア › 色の凡例

実行計画ビューアのノードはアクセスの種類で色分けされ、各カードの「アクセス」の行にも書かれています:緑=キーによる検索または定数(エンジンが行に直接たどり着くか、データをまったく読まない)、黄=インデックスの範囲のスキャン、オレンジ=インデックス全体のスキャン、赤=テーブルのフルスキャン(インデックスなし、最悪のケース)、青=ソート、紫=複数テーブルの結合、グレー=それ以外(集計、サブクエリー、またはCalíopeが分類しない操作)。バーの凡例には、最も多くを語る4色(緑、黄、赤、青)が載っています。

赤いノードは最適化の余地を示し、たいていはインデックスを追加することで改善します。

キーワード: フルスキャン、範囲、インデックス、色、最適化、EXPLAIN

VoiceOverで使う実行計画ビューア

キャンバスはVoiceOverが読めない図なので、実行計画はツリーの順に、深さで字下げしたリストとして提供されます。

場所: ワークスペース › ツール › 実行計画

実行計画のキャンバスはVoiceOverが読めない図なので、Calíopeはそれをリストとして提供します。「実行計画の階層」のセクションには、ノードごとに1行があり、ツリーの順に、深さで字下げされ、ノード名とそのアクセスの種類、推定行数、時間、詳細が入ります。時間はいつも「—」と読み上げられます。実行計画はクエリーを実行せずに求めるからです。

どのプラットフォームでも同じように動きます。

キーワード: VoiceOver、アクセシビリティ、EXPLAIN、実行計画、ノード