tencent cloud

TDSQL-C for MySQL

SQLの実行と実行計画の確認

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:46:24
読み取り専用分析エンジンはMySQLプロトコルおよび構文と互換性があります。ユーザーはMySQLクライアントまたは開発言語のMySQLコネクタを使用して読み取り専用分析エンジンにアクセスし、SQL文を実行することができます。
読み取り専用分析エンジンは読み取り専用インスタンスであるため、実行可能なSQL文は主にSELECT文となり、DMLおよびDDL文を実行できません。また、クエリはオブジェクト権限によって厳密に制限され、アクセスアカウントが特定のオブジェクトに対するSELECT権限を持たない場合、当該オブジェクトの参照も行えません。
SQLを実行する際、MySQLの構文を直接使用して構文を編集し、読み取り専用分析エンジンで実行できます。しかし、実行結果が期待通りにならない場合も頻繁に発生します。そのような場合は、EXPLAIN機能で実行計画を確認できます。

EXPLAIN 機能および使用方法

EXPLAINを使用すると、読み取り専用分析エンジンでクエリ文を実行する際に選択された実行計画を確認できます。これは内部オプティマイザによる複数段階の最適化を経て最終的に選択された最適なクエリプランです。実行計画を確認する際、実際にSQLを実行することはなく、実行計画のみを出力します。
EXPLAIN 例:
EXPLAIN <SELECT_STATMENT>

explain select * from t1 left join t2 on t1.id = t2.id;
返却結果は以下の通りです:
+---------------------------------------------------------------------------------+
| query plan |
+---------------------------------------------------------------------------------+
| ============================================ |
| |ID|OPERATOR |NAME|EST.ROWS| |
| -------------------------------------------- |
| |0 |HASH JOIN | |12500.00| |
| |1 |├─TABLE FULL SCAN (B) |t2 |10000.00| |
| |2 |└─TABLE FULL SCAN (P) |t1 |10000.00| |
| -------------------------------------------- |
| Details: |
| ------------------------------------- |
| 0 - JOIN TYPE: left outer join, EQUAL: [eq(singleton.t1.id, singleton.t2.id)] |
| 1 - STORAGE: LIBRASTORE, BLOCK OFFSET: 1 |
| 2 - STORAGE: LIBRASTORE, BLOCK OFFSET: 1 |
+---------------------------------------------------------------------------------+

EXPLAIN結果の解釈

EXPLAINの返却結果は以下のフィールドを含みます:
IDはプラン内でオペレータが表示される番号であり、0から始まり下位レベルに向かって増加していきます。これによりユーザーが詳細を確認しやすくなります。
OPERATORはオペレータ名を表し、SQL実行プロセスにおける各ステップで実行される操作を表します。
NAMEは、クエリでアクセスされたテーブルやパーティションなどの情報を表示します。
EST.ROWSは、読み取り専用分析エンジンが統計情報に基づいて推定した各オペレータの処理行数を表示します。統計情報がない場合、デフォルト値に基づいて計算された値が表示されます。

オペレータ紹介

オペレータはクエリ結果を返すために実行される特定のステップです。下表に、読み取り専用分析エンジンが現在サポートする各種オペレータ名とその機能説明を示します:
オペレータ名称
オペレータ紹介
SORT
SORTオペレータは入力データをソートするために使用されます。
TOPN
ORDER BY 句の後に LIMIT 句が続く場合、オプティマイザは実行計画をさらに最適化し、TOP-N SORT オペレータを生成してヒープソートによってTOP-Nデータを選択できます。
LIMIT
LIMITオペレータはデータ出力の行数を制限するために使用され、これはMySQLのLIMITオペレータと同じ機能を持っています。
FILTER
FILTERオペレータは、指定された述語条件に基づいてデータをフィルタリングするために使用され、通常はWHERE/HAVING/ON句に現れます。
HASH JOIN
HASH JOINを利用して大規模データセットのJOIN操作を行います。オプティマイザは2つのデータセットテーブルを使用し、小さい方のテーブルをメモリ内でJOIN条件に基づいてハッシュテーブルを構築します。その後、データベースはより大きなデータセットをスキャンし、ハッシュテーブルをプローブして関連条件を満たす行を見つけます。
COLUMN READ
遅延マテリアライゼーションオペレータは、読み取り専用分析エンジンが部分的なフィルタ条件をTableScanオペレータにプッシュダウンすることをサポートします。つまり、まずフィルタ条件に関連する列データをスキャンし、条件を満たす行をフィルタリングした後、これらの行の他の列データを再スキャンし、後続の計算を続行します。これにより、IOスキャンとデータ処理の計算量を削減します。
TABLE FULL SCAN
対象テーブルに対してフルテーブルスキャンを実行します。
UINION
UNIONオペレータは、2つのクエリ結果セットに対して和集合演算を行うために使用されます。
WINDOW FUNCTION
WINDOW FUNCTIONオペレータは、SQLの分析関数(ウィンドウ関数とも呼ばれる)を実装するために使用され、ウィンドウ内の関連行の結果を計算します。ウィンドウ関数は各グループで複数行を返すことができ、グループ内の各行はウィンドウに基づく論理計算の結果です。
HASH GROUP BY
GROUP BYオペレータは、主にSQLでグループ集計計算操作を行うために使用されます。一般的な集計関数(SUM/MAX/MIN/AVG/COUNT/STDDEV)は、すべてGROUP BYオペレータを割り当てることで実行されます。
PROJECTION
射影オペレータは、SQL文のSELECTリストに対応し、各入力データを新しい出力データにマッピングする機能を担います。
EXCHANGE RECEIVER
データ受信オペレータは、MPPクエリ実行時に各計算ノード間でデータを交換する際にデータを受信するために使用されます。
EXCHAGE SENDER
データ送信オペレータは、MPPクエリ実行時に各計算ノード間でデータを交換する際にデータを送信するために使用されます。

Detail情報

上記の結果テーブルに表示されている情報以外に、下部にはDetail項目が表示されます。Detail項目には各オペレータに付随する追加情報が表示され、その形式は n - detail info となります。ここで、n は各オペレータのIDを表し、その後ろには各オペレータの具体的な情報が続きます。以下の表に、各オペレータに表示される具体的な情報をリストアップします。
オペレータ名称
Detail情報
SORT
ORDER BY KEY:ソートオペレータが採用するソートキーを指します。
TOPN
ORDER BY KEY:ソートオペレータが採用するソートキーを指します。
OFFSET:Limit操作で指定されるオフセット。
COUNT:Limit操作で指定される保持行数。
LIMIT
OFFSET:Limit操作で指定されるオフセット。
COUNT:Limit操作で指定される保持行数。
FILTER
CONDITIONS:FILTERオペレータがデータをフィルタリングする際に採用する述語条件を指します。
HASH JOIN
JOIN TYPE:現在のJOINのタイプ(例:インナージョイン、レフトアウタージョイン、セミジョインなど)。
NON EQUAL:現在のJOINがデカルト積かどうかを示します。このフィールドがない場合、デカルト積ではないことを意味します。
EQUAL:2つのテーブルがJOINを行う際に採用される等価条件を表示します。
OTHER COND:2つのテーブルがJOINを行う際の非等価条件を表示します。
さらに、上記のEXPLAIN結果でIDが1と2のオペレータ名の後にそれぞれ(B)と(P)のフラグが付いていることが確認できます。これらのフラグはHASH JOIN操作時のビルド側とプローブ側を示しており、Bはビルド、Pはプローブを表します。
COLUMN READ
COLUMN READ:遅延マテリアライゼーションで読み取られるカラム名。
TABLE FULL SCAN
STORAGE:読み取られる基盤ストレージタイプで、現在LIBRASTOREとTDSQLの2種類をサポートしています。
BLOCK OFFSET:現在のテーブルが全体のSQLにおけるクエリブロック番号であり、ヒントの使用を補助するために用いられます。
UINION
なし。
WINDOW FUNCTION
WINDOW FUCN DESCS:ウィンドウ関数の名称。
PARTITION BY:パーティションキー。
ORDER BY: ソートキー。
FRAME:ウィンドウ関数のウィンドウ定義。
HASH GROUP BY
GROUP BY:集約関数を実行する際に指定されるグループ化キー。
AGG FUNCS:SQLで指定された集計関数。
PROJECTION
EXPRS:プロジェクションオペレータが実行する式のリストであり、主に実行されるキャストおよび様々なスカラー関数です。
EXCHANGE RECEIVER
なし。
EXCHAGE SENDER
ExchangeType:データ交換に使用される方式。
PASS:複数のノードのデータを1つのノードに送信する。
BCJ: 1つのノードのデータを複数のノードにブロードキャストする。例として、JOIN時にビルドテーブルのデータを各ノードにブロードキャストし、JOIN操作を実行できるようにします。
HASH:データをハッシュ関数で分散させ、各ノードに配布する。例として、JOIN時に左右のテーブルデータを分散・再配置するために使用されます。
HASH (BY PARTITION):2つのテーブルをJOINする際、一方のテーブルの結合キーがパーティションキーである場合、もう一方のテーブルを結合キーがパーティションキーであるテーブルの分散方式に従ってシャッフルアウトします。
ランタイムフィルタオペレータが有効で、かつプランにハッシュ結合が存在する場合、ハッシュ結合オペレータの両側に以下の二種類の特殊な詳細情報が付随することがあります。
Probe Runtime Filters:オペレータにこの情報が存在する場合、現在のオペレータが冗長データをフィルタリングするためにランタイムフィルタを適用していることを示します。
Build Runtime Filters:この情報はJOINオペレータにのみ表示され、現在のJOINオペレータのビルド側でランタイムフィルタが生成され、プローブ側の冗長データを事前にフィルタリングするためです。具体的なランタイムフィルタの使用方法、チューニング、および表示情報の役割については、Runtime Filter 使用手順を参照してください。
EXPLAINを実行すると、異なるオペレータが異なる情報を返します。オプティマイザの動作を制御するためにOptimizer Hintsを使用することで、物理オペレータの選択を制御できます。
/*+ HASH_JOIN_PROBE(t1) */ は、オプティマイザがt1テーブルをhash joinのprobeテーブルとして強制的に採用することを示します。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック