Oracle 執行計劃 訪問路徑
--訪問路徑
1、全表掃描 FTS(Full Table Scan)
如果要讀取表的大部分行或著表很小時,全表掃描是有利的;如果只需要讀取表的小部分行,則更適於索引掃描。
2、索引掃描(Index Scan)
索引掃描是用列資料的索引來快速查詢於某些列值相匹配的行。索引的葉塊包含資料的 ROWID。一旦確定了 ROWID,即可進行 ROWID 掃描。
3、索引範圍掃描(Index Range Scan)
如果需要返回一個資料範圍,並且存在列索引,可以使用一個更加有效的方法來利用索引訪問資料。在查詢中使用 between 、order by、大於、小於、小於等於、大於等於操作符會喚起索引範圍掃描。
4、ROWID 查詢
ROWID 可以通過給實際的資料檔案、物件、塊和塊中的行做標記來唯一識別各行,以此查詢一行資料。如果 ROWID 是事先已知的,則 ROWID 查詢是訪問一行資料的最快方法。但通常 ROWID 都是事先未知的。
5、索引挑掃(Index Skip Scan)
在 Oracle 9i以前的版本中,where 子句必須在複合索引中有主列才能使用。索引跳掃意味著不必有某個複合索引的全部主列就可以使用該索引。
6、快速全索引掃描(Fast Full Index Scan)
如果索引包含有需要返回的所有資料,那麼就根本不需要訪問表中的資料塊。快速索引掃描只讀取索引塊,而不訪問表中的資料。因此僅當 select 和 where 子句中只有索引列的時候,這種訪問資料的速度才是可能的。
7、索引合併(Index Join)
索引合併並不是表合併,而是將多個索引合併到一起,並以類似於快速全索引掃描的方式使用。在查詢中只能使用索引中的哪些列,否則就需要訪問表。
--合併
當多個表參與查詢時候,就需要將這些表以某種方式合併到一起。在from子句中出現多個表就說明需要合併。將多個表合併到一起有四種基本方法:Cartesian 合併、巢狀迴圈合併、排序合併、雜湊合併。合併操作只將兩個表合併到一起。如果from 子句中有第三個表,就將前面兩個表的合併結果與第三個表合併。這個過程會一直持續,知道將所有表都合併到一起,從而形成一個結果集。
1、Cartesian 合併(Cartesian Join)
要建立一個 Cartesian 合併(有時候稱作 Cartesian 乘積),需要將一個表中的每行與另一個表中的每行相匹配。這需要對兩個表都進行 FTS。許多時候都不需要 Cartesian 合併,可以通過在 where 子句中加入合併條件來插入 Carsian 合併。優化器偶爾會選擇對兩個非常小的表執行 Cartesian 合併,然後消除不參與合併的行。
2、巢狀迴圈合併(Nested Loop Join)
巢狀迴圈合併是最早的合併方法之一。這種合併方法首先要從參與合併的表中選出一個作為驅動表(或外部表),參與合併的另一個表則為內部表。要讀取外部表的每一行,對外部表的每一行,都要在內部表中進行搜尋,看是否可以匹配。對外部表是用FTS 進行訪問的;對內部表則可用其他任何訪問方法。當外部表較小並且內部表可以快速搜尋以進行匹配(理想的是通過索引)時,應優先選用巢狀迴圈合併。
3、排序歸併合併(Sort Merge Joins)
排序歸併合併首先將兩個表排序。排序後,將結果歸併在一起以查詢匹配的資料行。典型情況下,雜湊合併與巢狀迴圈合併優於排序歸併合併。但是,如果資料已經排好序或者需要 non-equi-join 時,排序歸併合併就較好。
4、雜湊合併(Hash Join)
為了進行雜湊合併,需要對兩個表中較小的表執行雜湊函式。該雜湊函式建立一個表,該表中的資料可以很快查詢到;隨後對兩表中較大的表執行相同的雜湊函式,如果第二個表中有一行與第一個表中的一行相匹配,那麼就能很快查詢到這行資料。當有足夠的記憶體來存放整個小表時,雜湊合併效果最好。要能進行雜湊合併,首先必須進行 equi-join (查詢兩表中對等的記錄)。
5、外部合併(Outer Join)
在前面的合併方法中,只有當在另外一個表中存在匹配時,才會在結果集中包含表中的行;反之亦然。在外部合併中,即使在另外一個表中沒有匹配,表中所有的資料行都要參與合併。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27633655/viewspace-1080694/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 訪問路徑Oracle
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle-繫結執行計劃Oracle
- jenkins 修改訪問路徑Jenkins
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL
- Oracle執行計劃Explain Plan 如何使用OracleAI
- Oracle檢視執行計劃的命令Oracle
- oracle使用outline固定執行計劃事例Oracle
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- Oracle緊急固定執行計劃之手段Oracle
- [20210926]並行執行計劃疑問.txt並行
- 執行計劃-1:獲取執行計劃
- Oracle 通過註釋改變執行計劃Oracle
- 知識篇 | ORACLE 如何執行計劃繫結Oracle
- Oracle如何檢視真實執行計劃(一)Oracle
- Oracle如何手動重新整理執行計劃Oracle
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 在Oracle中,如何得到真實的執行計劃?Oracle
- nginx對訪問路徑進行限制【部分介面可以內外網訪問、剩餘介面只可以內網訪問】Nginx內網
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- ThinkPHP 訪問路徑隱藏 index.php 問題PHPIndex
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- 路徑規劃: 淺談路徑規劃演算法演算法
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- MySQL Cases-執行計劃向Oracle看齊(FORMAT=tree)MySqlOracleORM
- 【TUNE_ORACLE】定製化執行計劃SQL參考OracleSQL
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- nginx 從一個路徑訪問另一個路徑怎麼跳轉Nginx
- Oracle 變數窺視引起執行計劃異常故障分析Oracle變數
- oracle執行計劃------未走索引,隱式轉換的坑Oracle索引
- MySQL執行計劃解析MySql
- mysql explain 執行計劃MySqlAI