MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  名前付き接続の実行計画情報の取得

8.8.4 名前付き接続の実行計画情報の取得

名前付き接続で実行されている説明可能なステートメントの実行計画を取得するには、次のステートメントを使用します:

EXPLAIN [options] FOR CONNECTION connection_id;

EXPLAIN FOR CONNECTION は、特定の接続でクエリーを実行するために現在使用されている EXPLAIN 情報を返します。 データ (およびサポート統計) が変更されたため、同等のクエリーテキストで EXPLAIN を実行すると、異なる結果が生成される可能性があります。 この動作の違いは、より一時的なパフォーマンスの問題を診断する場合に役立ちます。 たとえば、あるセッションで完了までに長時間かかるステートメントを実行している場合、別のセッションで EXPLAIN FOR CONNECTION を使用すると、遅延の原因に関する有用な情報が得られることがあります。

connection_id は、INFORMATION_SCHEMA PROCESSLIST テーブルまたは SHOW PROCESSLIST ステートメントから取得される接続識別子です。 PROCESS 権限がある場合は、任意の接続の識別子を指定できます。 それ以外の場合は、独自の接続に対してのみ識別子を指定できます。 いずれの場合も、指定した接続に対するクエリーを説明するのに十分な権限が必要です。

名前付き接続がステートメントを実行していない場合、結果は空になります。 それ以外の場合、EXPLAIN FOR CONNECTION は、名前付き接続で実行されているステートメントが説明可能な場合にのみ適用されます。 これには、SELECT, DELETE, INSERT, REPLACE および UPDATE が含まれます。 (ただし、EXPLAIN FOR CONNECTION は、これらのタイプのプリペアドステートメントであっても、プリペアドステートメントに対しては機能しません。)

名前付き接続が説明可能なステートメントを実行している場合、出力はステートメント自体で EXPLAIN を使用して取得します。

指定された接続が説明不可能なステートメントを実行している場合は、エラーが発生します。 たとえば、EXPLAIN は説明できないため、現在のセッションの接続識別子に名前を付けることはできません:

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|             373 |
+-----------------+
1 row in set (0.00 sec)

mysql> EXPLAIN FOR CONNECTION 373;
ERROR 1889 (HY000): EXPLAIN FOR CONNECTION command is supported
only for SELECT/UPDATE/INSERT/DELETE/REPLACE

Com_explain_other ステータス変数は、実行された EXPLAIN FOR CONNECTION ステートメントの数を示します。


関連キーワード:  テーブル, ステートメント, インデックス, InnoDB, 実行, EXPLAIN, 接続, クエリー, 結合, 名前