一、配置執行計劃
Tools—Preferences—Window Types—Plan Window

二、檢視執行計劃
選中代碼塊
Tools—Explain plan 或者 F5
1、執行 計劃的常用列字段解釋
基數(Cardinality) : Oracle 估計的目前操作的傳回結果集行數
位元組(Bytes) :執行該步驟後傳回的位元組數
耗費(COST)、CPU耗費: Oracle 估計的該步驟的執行成本,用于說明SQL執行的代價,理論.上越小越好(該值可能與實際有出入)
時間(Time):Oracle估計的目前操作所需的時間
2、執行順序
縮進最多的最先執行; (縮進 相同時,最上面的最先執行)
三、表通路的幾種方式(非全部)
TABLE ACCESS FULL (全表掃描)
Oracle會讀取表中所有的行,并檢查每一行是否滿足SQL語句中的Where 限制條件;
使用建議:資料量太大的表不建議使用全表掃描,除非本身需要取出的資料較多,占到
表資料總量的5%~ 10%或以上
TABLE ACCESS BY NDEX ROWID (通過ROWID的表存取)
ROWID是由Oracle自動加在表中每行最後的一列僞列,既然是僞列,就說明表中并不
會實體存儲ROWID的值。
你可以像使用其它列一樣使用它,隻是不能對該列的值進行增、删、改操作。
一旦一行資料插入後,則其對應的ROWID在該行的生命周期内是唯-的,即使發生行
遷移,該行的ROWID值也不變。
行的ROWID指出了該行所在的資料檔案、資料塊以及行在該塊中的位置,是以通過
ROWID可以快速定位到目标資料上,這也是Oracle中存取單行資料最快的方法:
TABLE ACCESS BY INDEX SCAN (索引掃描)
在索引塊中,既存儲每個索引的鍵值,也存儲具有該鍵值的行的ROWID.
1、索引掃描實際分兩步:
—掃描索引得到對應的ROWID,
—通過ROWID定位到具體的行讀取資料。
2、五種索引掃描
INDEX UNIQUE SCAN (索引唯一掃描):
針對唯:唯一性索引(UNIQUE INDEX)的掃描,每次至多隻傳回一條記錄;
表中某字段存在UNIQUE、PRIMARYKEY限制時,Oracle 常實作唯一性掃描
INDEX RANGE SCAN (索引範圍掃描):
使用一一個索引存取多行資料:
發生索引範圍掃描的三種情況:
在唯一索引列上使用了範圍操作符(如: >, <, <>, >=, <=, between) ;
在組合索引上,隻使用部分列進行查詢(查詢時必須包含前導列,香則會走全表掃描);
對非唯一索引列上進行的任何查詢;
INDEX FULL SCAN (索引全掃描):
進行全索引掃描時,查詢出的資料都必須從索引中可以直接得到;
INDEX FAST FULL SCAN (索引快速掃描):
掃描索引中的所有的資料塊,與NDEX FULL SCAN類似,但是一個顯著的差別是它
不對查詢出的資料進行排序( 即資料不是以排序順序被傳回) ;
INDEX SKIP SCAN (索引跳躍掃描):
表有一個複合索引,且在查詢時有除了前導列(索引中第一列) 外的其他列作為條件:
四、Oracle優化器
RBO (Rule-Based Optimization)基于規則的優化器
RBO有嚴格的使用規則,隻要按照這套規則去寫SQL語句,無論資料表中的内容怎樣,
也不會影響到你的執行計劃。換句話說,RBO對資料“不敏感”,它要求SQL編寫人員必
須要了解各項細則。RBO -直沿用至ORACLE 9i,從ORACLE 10g開始,RBO已經徹底
被抛棄。
CBO (Cost-Based Optimization)基于代價的優化器
CBO是一種比RBO更加合理、可靠的優化器,
在ORACLE 10g中完全取代RBO. CBO
通過計算各種可能的執行計劃的“代價",即COST,從中選用COST最低的執行方案作為實
際運作方案。