Oracle RDBMS 執行每條 SQL 都經過優化器評估。掌握優化器如何選擇存取路徑、索引如何被使用,是 SQL 調優的前提。EXPLAIN PLAN 可快速查出給定 SQL 的資料存取路徑,助你選擇最優查詢方式。
-- Unix/Linux
@$ORACLE_HOME/rdbms/admin/utlxplan.sql
-- Windows
@%ORACLE_HOME%\rdbms\admin\utlxplan.sql
-- 建立公用同義詞與授權(供所有用戶使用)
CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE;
GRANT ALL ON PLAN_TABLE TO PUBLIC;
EXPLAIN PLAN [SET STATEMENT_ID = '唯一標識'] [INTO table_name]
FOR ;
STATEMENT_ID:區分同一 PLAN_TABLE 中多筆計劃,建議每次指定INTO:指定目標表,預設為 PLAN_TABLEEXPLAIN PLAN SET STATEMENT_ID = 'T_TEST' FOR SELECT * FROM T_TEST;
方式 A:手工查詢 PLAN_TABLE(舊版相容)
SELECT OPERATION, OPTIONS, OBJECT_NAME, OBJECT_TYPE, ID, PARENT_ID
FROM PLAN_TABLE
WHERE STATEMENT_ID = 'T_TEST'
ORDER BY ID;
方式 B:DBMS_XPLAN.DISPLAY(推薦,格式化輸出)
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', 'T_TEST', 'TYPICAL'));
BASIC、TYPICAL(預設)、ALL、ADVANCED-- 1. 建立 PLAN_TABLE(同方式一)
-- 2. 建立 PLUSTRACE 角色並授權
@$ORACLE_HOME/sqlplus/admin/plustrce.sql
GRANT PLUSTRACE TO PUBLIC; -- 或特定用戶
SET AUTOTRACE ON; -- 顯示執行計劃 + 統計 + 結果集
SET AUTOTRACE ON EXPLAIN; -- 僅顯示執行計劃(仍執行 SQL)
SET AUTOTRACE ON STATISTICS; -- 僅顯示統計資訊(仍執行 SQL)
SET AUTOTRACE TRACEONLY; -- 顯示計劃+統計,不顯示結果集(仍執行)
SET AUTOTRACE TRACEONLY EXPLAIN; -- 僅顯示計劃,不顯示結果/統計(仍執行!)
SET AUTOTRACE OFF; -- 關閉
AUTOTRACE 所有模式都會實際執行 SQL!
即使SET AUTOTRACE TRACEONLY EXPLAIN,UPDATE/DELETE/MERGE 依然會修改資料。
調優 DML 時嚴禁使用 AUTOTRACE,請改用 EXPLAIN PLAN FOR 或第三方工具。
SET TIMING ON
SET AUTOTRACE TRACEONLY EXPLAIN
SELECT COUNT(*) FROM BIG_TABLE;
| 工具 | 操作方式 | 優點 |
|---|---|---|
| PL/SQL Developer | SQL Window 輸入 SQL → F5 或 Tools → Explain Plan | 圖形化樹狀圖、Cost 明細、Predicate 高亮、索引建議 |
| TOAD | Editor 中輸入 SQL → 下方 Explain Plan 分頁 | 多計劃對比、歷史記錄、自動索引建議 |
| SQL Developer | Worksheet 輸入 SQL → F10 或 Explain Plan 圖示 | 免費、內建、支援 12c+ Adaptive Plan 視覺化 |
| DBeaver | SQL Editor → Ctrl+Shift+E 或工具列 Explain Plan | 跨平台、開源、支援多種資料庫 |