溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle索引掃描

發布時間:2020-06-20 11:46:11 來源:網絡 閱讀:423 作者:llc018198 欄目:關系型數據庫
  1. 索引唯一掃描:是針對唯一性索引大掃描,它僅僅適用于where條件里是等值查詢的目標SQL,因為掃描的對象是唯一性索引,只掃描索引高度這么多個索引塊就停止了,索引的唯一掃描的結果至多只返回一條記錄,索引的唯一掃描,掃描索引高度-2個分支塊,永遠只掃描一個葉子塊。

  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條件也可以走,

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女