您好,登錄后才能下訂單哦!
索引唯一掃描:是針對唯一性索引大掃描,它僅僅適用于where條件里是等值查詢的目標SQL,因為掃描的對象是唯一性索引,只掃描索引高度這么多個索引塊就停止了,索引的唯一掃描的結果至多只返回一條記錄,索引的唯一掃描,掃描索引高度-2個分支塊,永遠只掃描一個葉子塊。
索引范圍掃描:索引范圍掃描,掃描索引高度-2個分支快,要掃描N多葉子塊,取決于where條件,索引范圍掃描是單塊讀,因為物理存儲是不連續的。select * from test where id<=1000;訪問路徑:ROOT -B1 -L1 -L7
索引是排序的,從左到右升序排,最左最小,最右做大,索引默認從左向右掃描,也可以加hint倒著掃描:
SQL> select /*+ index_desc(test) */*from test where object_id<=20; 19 rows selected. Execution Plan ---------------------------------------------------------- Plan hash value: 1069979465 --------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 19 | 3933 | 3 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID | TEST | 19 | 3933 | 3 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN DESCENDING| IDX_ID | 19 | | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------------------
3.索引的葉子塊只存rowid和列的鍵值,比表的數據塊存的更多的值,
select object_id from test where object_id<100;
select object_id from test where object_id<1000
性能是一樣的,索引掃描最大問題在于回表,如果回表再過濾,就最坑爹了,錯誤的INDEX RANGE SCAN,返回數據很多和大量回表
4.反鍵索引,
如果用sequence作為主鍵,如果insert數據,會不斷更新右邊的葉子塊,dml操作,同一個塊,同時只有一個進程去持有,CBC持有,latch: cache buffers chains,在高并發的insert環境中,sequence主鍵很容易產生熱點塊,解決辦法,把主鍵處理成隨機的,比如手機號或者***號,如果已經用sequence,可用反轉索引把葉子塊打亂來解決。另外一種解決辦法:sid+sequence+pid,反鍵索引多范圍掃描影響大。
5. INDEX SKIP SCAN 索引跳躍掃描。單塊讀 只可能發生在組合索引上,引導列(組合索引第一列)沒有包含在where條件中,并且引導列基數很低。INDEX SKIP SCAN 一般來說只會返回少量數據,如果返回大量數據,說明該執 行計劃可能有問題,也就是說索引建立不對。等待事件:db file sequential read HINT: INDEX_SS(表名/別名 索引名)
6.INDEX FULL SCAN (MIN/MAX) 索引最小/最大值掃描。單塊讀 通常發生在 select max(xxx) 或者
select min(xxx)并且xxx列上有索引。
等待事件:db file sequential read 我們幾乎觀察不到,因為只需讀
取索引高度相同的index block數。
HINT 無需指定,有索引會自動走INDEX FULL SCAN(MIN/MAX)
把select max(id) ,min(id) from test;
改成select (select max(id) from test) max,(select min(id) from test) min from dual,如果不改寫,需要掃描所有的葉子塊,為index full scan
==index uniqe scan ,index range scan,index skip scan 發生以上3種掃描方式的重大前提是必須有where條件,而index full scan和index fast full scan不需要where條件也可以走,
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。