EXPLAIN PLAN命令的輸出結果是解決SQL效率低下問題的最重要的診斷工具之一。此命令加載一個工作表格(默認名稱為PLAN_TABLE),表格中帶有Oracle優化器為SQL語句計算的執行計劃步驟。例如:
EXPLAIN PLAN FOR
SELECT empno, ename
FROM emp
WHERE ename LIKE 'S%';
由於PLAN_TABLE中的行形成了一個等級,對其進行查詢需要應用SELECT語句中的兩個復雜子語句——START WITH與CONNECT BY。第一次在Oracle 9i中出現並在10g中得到擴充的DBMS_XPLAN使格式化及顯示執行計劃更為容易。
DBMS_XPLAN.DISPLAY是一個表格標值函數,它顯示PLAN_TABLE的內容。與常規的純量函數SUBSTR或總計函數SUM不同的是,表格函數返回一個完整的行集合(rowset)。它們用在SELECT語句的FROM子語句中,前面必須加上TABLE這個詞。如:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY);
列表A顯示的是上述EXPLAIN PLAN語句的結果,並由DBMS_XPLAN.DISPLAY格式化。
值得注意的是,DBMS_XPLAN還能從存儲在系統全局區(System Global Area, SGA)內的指針顯示“實時”執行計劃。列表B顯示的是由用戶SCOTT執行的同一SQL語句。通過查看V$SESSION視圖,你可以找到執行SCOTT任務的最後一個SQL ID。這反過來又可輸入到DBMS_XPLAN.DISPLAY_CURSOR中,獲得指針所使用的執行計劃。
最後,DBMS_XPLAN.DISPLAY_AWR函數可用來查尋Oracle 10g的自動負荷信息庫(Automatic Workload Repository, AWR)獲得的歷史SQL語句,並顯示它的執行計劃。它顯示一個你可以訪問的含七天歷史記錄的滾動窗口。
所有這三個函數都是協調SQL語句的強大工具。
Bob Watkins(OCP、MCDBA、MCSE、MCT)是一個有25年經驗的計算機專業人士,從事過技術培訓師、顧問與數據庫管理員等職 。