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

發表于:2009-09-14來源:作者:點擊數: 標簽:軟件測試數據庫sqlSqlSQL
軟件測試 開發 技術數據庫進階: Oracle 中 SQL 語句執行效率的查找與解決[2] 數據庫設計 關鍵字: ID:指明某一步驟在執行計劃中的位置。 PARENT_ID:指明從某一操作中取得信息的前一個操作。通過對與ID和PARENT_ID使用Connect By操作,我們可以查詢整個執

軟件測試開發技術數據庫進階:OracleSQL語句執行效率的查找與解決[2] 數據庫設計

關鍵字:

ID:指明某一步驟在執行計劃中的位置。

  PARENT_ID:指明從某一操作中取得信息的前一個操作。通過對與ID和PARENT_ID使用Connect By操作,我們可以查詢整個執行計劃樹。

  C)EXPLAIN搜索路徑解釋

  •全表掃描(Full Table Scans)(無可用索引,大量數據,小表 ,全表掃描hints,HWM(High Water Mark), Rowid掃描)

  •索引掃描

  索引唯一掃描(Index Unique Scans)

  索引范圍掃描(Index Range Scans)

  索引降序范圍掃描(Index Range Scans Descending)

  索引跳躍掃描(Index Skip Scans)

  全索引掃描(Full Scans)

  快速全索引掃描(Fast Full Index Scans)

  索引連接(Index Joins)

  位圖連接(Bitmap Joins)

  •如何選擇訪問路徑: 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會快些,需?/td>

  

原文轉自:http://www.anti-gravitydesign.com

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