程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 通過分析SQL語句的執行計劃優化SQL(三)第五章ORACLE的執行計劃2

通過分析SQL語句的執行計劃優化SQL(三)第五章ORACLE的執行計劃2

編輯:Oracle數據庫基礎
5.5如何產生執行計劃
       5.6如何分析執行計劃

5.5如何產生執行計劃

要為一個語句生成執行計劃,可以有3種方法:
1).最簡單的辦法

Sql> set autotrace on
Sql> select * from dual;
執行完語句後,會顯示explain plan 與 統計信息。
這個語句的優點就是它的缺點,這樣在用該方法查看執行時間較長的sql語句時,需要等待該語句執行成功後,才返回執行計劃,使優化的周期大大增長。

如果想得到執行計劃,而不想看到語句產生的數據,可以采用:
Sql> set autotrace traceonly
這樣還是會執行語句。它比set autotrace on的優點是:不會顯示出查詢的數據,但是還是會將數據輸出到客戶端,這樣當語句查詢的數據比較多時,語句執行將會花費大量的時間,因為很大部分時間用在將數據從數據庫傳到客戶端上了。我一般不用這種方法。

Sql> set autotrace traceonly explain
如同用explain plan命令。對於select 語句,不會執行select語句,而只是產生執行計劃。但是對於dml語句,還是會執行語句,不同版本的數據庫可能會有小的差別。這樣在優化執行時間較長的select語句時,大大減少了優化時間,解決了“set autotrace on”與“set autotrace traceonly”命令優化時執行時間長的問題,但同時帶來的問題是:不會產生Statistics數據,而通過tatistics數據的物理I/O的次數,我們可以簡單的判斷語句執行效率的優劣。


如果執行該語句時遇到錯誤,解決方法為:
(1)在要分析的用戶下:
Sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) 用sys用戶登陸
Sqlplus > @ ?\sqlplus\admin\plustrce.sql
Sqlplus > grant plustrace to user_name;   - - user_name是上面所說的分析用戶

2).用explain plan命令
(1) sqlplus > @ ?\rdbms\admin\utlxplan.sql
(2) sqlplus > explain plan set statement_id =’???’ for select ………………
注意,用此方法時,並不執行sql語句,所以只會列出執行計劃,不會列出統計信息,並且執行計劃只存在plan_table中。所以該語句比起set autotrace traceonly可用性要差。需要用下面的命令格式化輸出,所以這種方式我用的不多:

set linesize 150
set pagesize 500
col PLANLINE for a120
SELECT EXECORD EXEC_ORDER, PLANLINE
   FROM (SELECT PLANLINE, ROWNUM EXECORD, ID, RID
       FROM (SELECT PLANLINE, ID, RID, LEV
             FROM (SELECT lpad('' '',2*(LEVEL),rpad('' '',80,''     ''))||
                        OPERATION||''   ''||                 -- Operation
                        DECODE(OPTIONS,NULL,'''',

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved