Skip to content

元ドキュメント: EXPLAIN 文

EXPLAIN 文

概要

EXPLAIN 文は、SQL クエリの実行計画を確認するための重要なツールです。クエリオプティマイザがどのようにクエリを実行するかを事前に把握することで、パフォーマンスのボトルネックを特定し、最適化の方向性を決定できます。

TDSQL Boundless では、MySQL 互換の EXPLAIN 構文に加えて、分散環境に特有の実行計画情報を確認できます。

基本的な使い方

sql
-- 基本構文
EXPLAIN SELECT * FROM users WHERE user_id = 1001;

-- 拡張フォーマット
EXPLAIN FORMAT=TREE SELECT * FROM users WHERE user_id = 1001;

-- JSON フォーマット(詳細情報)
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE user_id = 1001;

出力カラムの説明

EXPLAIN の出力には以下のカラムが含まれます。

カラム説明
idSELECT の識別番号。サブクエリや UNION がある場合、複数のIDが表示される
select_typeSELECT の種類(SIMPLE、PRIMARY、SUBQUERY、DERIVED など)
table参照先のテーブル名
partitions参照先のパーティション
type結合方式。パフォーマンスに大きく影響する重要な指標
possible_keys使用可能なインデックスの候補
key実際に使用されるインデックス
key_len使用されるインデックスの長さ(バイト数)
refインデックスとの比較対象のカラムまたは定数
rows検査される推定行数
filteredテーブル条件によってフィルタされる行の割合(%)
Extra追加情報(Using index、Using where、Using filesort など)

type カラムの詳細

type カラムは、テーブルへのアクセス方式を示します。パフォーマンスの良い順に以下の通りです。

type説明性能
systemテーブルに1行のみ(システムテーブル)最良
const主キーまたはユニークインデックスによる定数検索非常に高速
eq_ref結合時に主キーまたはユニークインデックスを使用高速
ref非ユニークインデックスによる検索良好
rangeインデックスの範囲スキャン許容範囲
indexインデックスのフルスキャン要注意
ALLテーブルフルスキャン要改善

Extra カラムの重要な値

説明注意点
Using indexカバリングインデックスが使用されている良好な状態
Using whereWHERE 句でフィルタリングが行われている通常は問題なし
Using temporary一時テーブルが使用されている改善を検討
Using filesortファイルソートが使用されている改善を検討
Using index conditionインデックスコンディションプッシュダウンが使用されている良好な状態

分散環境での EXPLAIN の注意点

TDSQL Boundless の分散環境では、EXPLAIN の出力に以下の特有の情報が含まれる場合があります。

クロスノードクエリの確認

分散環境では、クエリが複数のノードにまたがる場合があります。EXPLAIN を使用して、クエリがシングルノードで完結するか、クロスノードアクセスが必要かを確認することが重要です。

分散結合の実行計画

JOIN を含むクエリでは、結合対象のデータが同一ノードに存在するかどうかによって実行計画が大きく異なります。

sql
-- シャードキーを使用した結合(効率的)
EXPLAIN SELECT o.*, u.name 
FROM orders o 
JOIN users u ON o.user_id = u.user_id 
WHERE o.user_id = 1001;

-- シャードキー以外での結合(クロスノードアクセスの可能性)
EXPLAIN SELECT o.*, p.name 
FROM orders o 
JOIN products p ON o.product_id = p.product_id;

分散環境での最適化ポイント

  1. シャードキーを WHERE 句に含める — シングルノードクエリに絞り込む
  2. 不要なクロスノード結合を避ける — テーブル設計でデータアフィニティを考慮する
  3. EXPLAIN FORMAT=JSON を活用する — 詳細なコスト情報を確認する

実践的な分析例

例1:フルテーブルスキャンの改善

sql
-- 改善前(type: ALL)
EXPLAIN SELECT * FROM orders WHERE order_date > '2026-01-01';

-- インデックスの追加
CREATE INDEX idx_order_date ON orders(order_date);

-- 改善後(type: range)
EXPLAIN SELECT * FROM orders WHERE order_date > '2026-01-01';

例2:Using filesort の改善

sql
-- 改善前(Extra: Using filesort)
EXPLAIN SELECT * FROM users ORDER BY created_at LIMIT 100;

-- インデックスの追加
CREATE INDEX idx_created_at ON users(created_at);

-- 改善後(Extra: Using index)
EXPLAIN SELECT * FROM users ORDER BY created_at LIMIT 100;

まとめ

EXPLAIN 文は、クエリのパフォーマンス分析における基本ツールです。type カラムと Extra カラムの値を正しく読み取り、適切なインデックス設計やクエリの書き換えにつなげてください。分散環境では、クロスノードアクセスの有無にも注意が必要です。

詳細な仕様については、元ドキュメントをご参照ください。

Tencent Cloud プロダクトドキュメント