Oracle SQL 執行計劃生成與可視化雙核心工具
步驟 1:生成計劃 (EXPLAIN PLAN)
EXPLAIN PLAN FOR
SELECT * FROM (
SELECT * FROM dun_search_view WHERE 1=1
AND ((salename='陳永智' AND xsqy='廣州辦事處')
OR (','||fzuserid||',' LIKE '%,6839951,%'))
) WHERE ROWNUM <= 30;
步驟 2:顯示計劃 (DBMS_XPLAN)
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
進階顯示選項
-- 顯示詳細信息 (含Predicate/Projection/Outline等)
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(FORMAT => 'ALL'));
-- 顯示最後一次語句計劃
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR);
-- 指定SQL_ID與Child Number
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id', 0, 'ALL'));
輸出關鍵欄位解讀
- Operation:操作類型 (TABLE ACCESS FULL / INDEX RANGE SCAN / HASH JOIN 等)
- Name:對象名 (表名/索引名)
- Rows:預估返回行數 (Cardinality)
- Cost (%CPU):優化器成本模型估算值
- Time:預估執行時間
- Predicate Information:存取/過濾謂詞條件 (編號對應 Operation ID)
- Note:特殊提示 (如動態採樣、基線使用、適應性計劃等)
實戰技巧
- 對比
EXPLAIN PLAN (預估) 與 DISPLAY_CURSOR (實際) 發現統計信息偏差
- 關注
Cost 與 Rows 巨大偏差 → 需收集/修正統計信息
FULL TABLE SCAN 不一定是壞事,小表/高選擇率時最優
- 善用
FORMAT => 'ALL +OUTLINE' 獲取完整 Outline 用於 SPM 固化