關鍵字:
• 如何選擇訪問路徑: CBO首先檢查WHERE子句中的條件以及FROM子句,確定有哪些訪問路徑是可用的。然后CBO使用這個訪問路徑產生一組可能的執行計劃,再通過索引、表的統計信息評估每個計劃的成本,最后優化器選擇成本最低的一個。
• 表的連接方式:
Nested Loops會循環外表(驅動表),逐個比對和內表的連接是否符合條件。在驅動表比較小,內表比較大,而且內外表的連接列有索引的時候比較好。當SORT_AREA空間不足的時候,Oracle也會選擇使用NL?;贑ost的Oracle優化器(CBO)會自動選擇較小的表做外表。(優點:嵌套循環連接比其他連接方法有優勢,它可以快速地從結果集中提取第一批記錄,而不用等待整個結果集完全確定下來。缺點:如果內部行源表(讀取的第二張表(內表)已連接的列上不包含索引,或者索引不是高度可選時, 嵌套循環連接效率是很低的。如果驅動行源表(從驅動表中提取的記錄)非常龐大時,其他的連接方法可能更加有效。)
SORT- merge JOIN,將兩表的連接列各自排序然后合并,只能用于連接列相等的情況,適合兩表大小相若的情況(在缺乏數據的選擇性或者可用的索引時,或者兩個源表都過于龐大(超過記錄數的5%)時,排序合并連接將比嵌套循環連更加高效。但是,排列合并連接只能用于等價連接(WHERE D.deptno=E.dejptno,而不是WHERE D.deptno>=E.deptno)。排列合并連接需要臨時的內存塊,以用于排序(如果SORT_AREA_SIZE設置得太小的話)。這將導致在臨時表空間占用更多的內存和磁盤I/O。)
HASH JOIN在其中一表的連接列上作散列,因此只有另外一個表做排序合并,理論上比SORT JOIN會快些,需要有足夠的內存,而且打開了SORT_JOIN_ENABLE參數。(當缺少有用的索引時,哈希連接比嵌套循環連接更加有效。哈希連接可能比排序合并連接更快,因為在這種情況下只有一張源表需要排序。哈希連接也可能比嵌套循環連接更快,因為處理內存中的哈希表比檢索B_樹索引更加迅速。和排序合并連接、群集連接一樣,哈希連接只能用于等價連接。和排序合并連接一樣,哈希連接使用內存資源,并且當用于排序內存不足時,會增加臨時表空間的I/O(這將使這種連接方法速度變得極慢)。最后,只有基于代價的優化器才可以使用哈希連接。)
BNo2: AUTOTRACE
•set autotrace 使用步驟:
1、以system登錄
2、創建plustrace角色; \sqlplus\admin\plustrce.sql
3、向常規用戶授予權限:grant plustrace to
4、如果沒有plan_table也要創建: \rdbms\admin\utlxplan.sql
• set autotrace 選項
on 顯示查詢結果,執行計劃,統計數據
on statistics 顯示查詢結果,統計數據,不顯示執行計劃
on explain 顯示查詢結果,執行計劃,不顯示統計數據
原文轉自:http://www.anti-gravitydesign.com