実行計画を可視化する
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、ズーム、パン、ナビゲーション、ピンチ