若要取得在具名連線中執行的可說明陳述式的執行計畫,請使用此陳述式
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
語句的數量。