軟件測試開發技術數據庫進階:Oracle中SQL語句執行效率的查找與解決[3]

發表于:2009-09-14來源:作者:點擊數: 標簽:軟件測試數據庫sqlSqlSQL
軟件 測試 開發技術 數據庫進階: Oracle 中 SQL 語句執行效率的查找與解決[3] 數據庫開發 關鍵字: 如何選擇訪問路徑: CBO首先檢查WHERE子句中的條件以及FROM子句,確定有哪些訪問路徑是可用的。然后CBO使用這個訪問路徑產生一組可能的執行計劃,再通過索引
軟件測試開發技術數據庫進階:OracleSQL語句執行效率的查找與解決[3] 數據庫開發

關鍵字:

• 如何選擇訪問路徑: 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

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97