名前付き接続で実行されている説明可能なステートメントの実行計画を取得するには、次のステートメントを使用します:
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
ステートメントの数を示します。