承接上篇,本文詳細說明三種主要解釋資料收集指令的完整語法、選項組合與行為差異。
EXPLAIN [ALL | PLAN | PLAN SELECTION]
[FOR SNAPSHOT | WITH SNAPSHOT]
FOR SQL_Statement;
SQL_Statement:有效的 INSERT/UPDATE/DELETE/SELECT/SELECT INTO/VALUES/VALUES INTO。FOR SNAPSHOT:僅收集解釋快照。WITH SNAPSHOT:同時收集完整解釋資料與快照。-- 僅完整解釋資料
EXPLAIN ALL FOR SELECT * FROM DEPARTMENT;
-- 僅解釋快照
EXPLAIN ALL FOR SNAPSHOT FOR SELECT * FROM DEPARTMENT;
-- 兩者皆收集
EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENT;
SET CURRENT EXPLAIN MODE = [NO | YES | EXPLAIN | REOPT | RECOMMEND INDEXES | EVALUATE INDEXES | RECOMMEND PARTITIONINGS | EVALUATE PARTITIONINGS];
NO:停用(預設)。YES:收集完整解釋資料,**並執行 SQL**。EXPLAIN:收集完整解釋資料,**不執行 SQL**。REOPT:執行時重新優化(REOPT)時收集(靜態/動態 SQL 皆適用)。RECOMMEND INDEXES / EVALUATE INDEXES:索引建議相關模式。RECOMMEND PARTITIONINGS / EVALUATE PARTITIONINGS:分割建議相關模式。SET CURRENT EXPLAIN SNAPSHOT = [YES | NO | EXPLAIN | REOPT];
CURRENT EXPLAIN MODE,但收集解釋快照而非完整資料。YES:收集快照並執行 SQL;EXPLAIN:收集快照不執行 SQL。用於嵌入式 SQL 應用程式的靜態/動態 SQL 分析:
PRECOMPILE ... EXPLAIN [NO|YES|ALL|REOPT] EXPLSNAP [NO|YES|ALL|REOPT]
BIND ... EXPLAIN [NO|YES|ALL|REOPT] EXPLSNAP [NO|YES|ALL|REOPT]
NO:停用。YES:每條靜態 SQL 收集並執行。ALL:每條靜態+動態 SQL 收集(忽略特殊暫存器設定)。REOPT:可重新優化的遞增綁定 SQL 在執行時收集。| 設定 | 收集完整資料 | 收集快照 | 執行 SQL |
|---|---|---|---|
| MODE=YES / SNAPSHOT=YES | 是 | 是 | 是 |
| MODE=EXPLAIN / SNAPSHOT=EXPLAIN | 是 | 是 | 否 |
| MODE=REOPT / SNAPSHOT=REOPT | 重新優化時 | 重新優化時 | 是(正常執行) |