Oracle 索引
在關聯式資料庫中,索引是一種與表有關的資料庫結構,它可以使對應於表的 SQL 語句執行得更快。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。
對於資料庫來說,索引是一個必選項,但對於現在的各種大型資料庫來說,索引可以大大提高資料庫的效能,以至於它變成了資料庫不可缺少的一部分。
索引分類:
邏輯分類
single column or concatenated 對一列或多列建所引
unique or nonunique 唯一的和非唯一的所引,也就是對某一列或幾列的鍵值( key )是否是唯一的。
Function-based 基於某些函式索引,當執行某些函式時需要對其進行計算,可以將某些函式的計算結果事先儲存並加以索引,提高效率。
Doman 索引資料庫以外的資料,使用相對較少
物理分類
B-Tree : normal or reverse key B-Tree 索引也是我們傳統上常見所理解的索引,它又可以分為正常所引和倒序索引。
Bitmap : 點陣圖所引,後面會細講
B-Tree 索引
B-Tree index 也是我們傳統上常見所理解的索引。 B-tree ( balance tree )即平衡樹,左右兩個分支相對平衡。
B-Tree index
Root 為根節點, branch 為分支節點, leaf 到最下面一層稱為葉子節點。每個節點表示一層,當查詢某一資料時先讀根節點,再讀支節點,最後找到葉子節點。葉子節點會存放 index entry (索引入口),每個索引入口對應一條記錄。
Index entry 的組成部分:
Indexentry entry header 存放一些控制資訊。
Key column length 某一 key 的長度
Key column value 某一個 key 的值
ROWID 指標,具體指向於某一個資料
建立索引:
conn as1 dex (id ,sex (),name ( i .. dex (i,, SQL dex_idx1 ,object_type DEX
索引分離於表,作為一個單獨的個體存在,除了可以根據單個欄位建立索引,也可以根據多列建立索引。 Oracle 要求建立索引最多不可超過 32 列。
SQL> create index dex_index2 on dex(sex,name);Index created. SQL> select object_name,object_type from user_objects;OBJECT_NAME OBJECT_TYPE--------------------------------------------------------------------------------DEX TABLEDEX_IDX1 INDEXDEX_INDEX2 INDEX
這裡需要理解:
編寫一本書,只有章節頁面定好之後再設定目錄;資料庫索引也是一樣,只有先插入好資料,再建立索引。那麼我們後續對資料庫的內容進行插入、刪除,索引也需要隨之變化。但索引的修改是由 oracle 自動完成的。
上面這張圖能更加清晰的描述索引的結構。
跟節點記錄 0 至 50 條資料的位置,分支節點進行拆分記錄 0 至 10.......42 至 50 ,葉子節點記錄每第資料的長度和值,並由指標指向具體的資料。
最後一層的葉子節是雙向連結,它們是被有序的連結起來,這樣才能快速鎖定一個資料範圍。
如:
SQL> select * from dex where id>23 and id<32; ID SE NAME---------- -- -------------------- 24 M chongshi 25 M chongshi 26 M chongshi 27 M chongshi 28 M chongshi 29 M chongshi 30 M chongshi 31 M chongshi8 rows selected.
如上面查詢的列子,透過索引的方式先找到第 23 條資料,再找到第 32 條資料,這樣就能快速的鎖定一個查詢的範圍,如果每條資料都要從根節點開始查詢的話,那麼效率就會非常低下。
點陣圖索引
點陣圖索引主要針對大量相同值的列而建立。拿全國居民登入一第表來說,假設有四個欄位:姓名、性別、年齡、和身份證號,年齡和性別兩個欄位會產生許多相同的值,性別只有男女兩種值,年齡,1 到 120 (假設最大年齡 120 歲)個值。那麼不管一張表有幾億條記錄,但根據性別欄位來區分的話,只有兩種取值(男、女)。那麼點陣圖索引就是根據欄位的這個特性所建立的一種索引。
Bitmap Index
從上圖,我們可以看出,一個葉子節點(用不同顏色標識)代表一個key , start rowid 和 end rowid 規定這種型別的檢索範圍,一個葉子節點標記一個唯一的 bitmap 值。因為一個數值型別對應一個節點,當時行查詢時,點陣圖索引透過不同點陣圖取值直接的位運算(與或),來獲取到結果集合向量(計算出的結果)。
舉例講解:
假設存在資料表T,有兩個資料列A和B,取值如下 ,我們看到 A和B列中存在相同的資料。
對兩個資料列A、B分別建立點陣圖索引:idx_t_bita和idx_t_bitb。兩個索引對應的儲存邏輯結構如下:
Idx_t_bita索引結構,對應的是葉子節點:
Idx_t_bitb索引結構,對應的是葉子節點:
對查詢“ select * from t where b=1 and (a=’L’ or a=’M’)”
分析 :點陣圖索引使用方面,和B*索引有很大的不同。B*索引的使用,通常是從根節點開始,經過不斷的分支節點比較到最近的符合條件葉子節點。透過葉子節點上的不斷Scan操作,“掃描”出結果集合rowid。
而點陣圖索引的工作方式截然不同。透過不同點陣圖取值直接的位運算(與或),來獲取到結果集合向量(計算出的結果)。
針對例項 SQL ,可以拆分成如下的操作:
1、a=’L’ or a=’M’
a=L:向量:1010
a=M:向量:0001
or操作的結果,就是兩個向量的或操作:結果為1011。
2、結合b=1的向量
中間結果向量:1011
B=1:向量:1001
and操作的結果,1001。翻譯過來就是第一和第四行是查詢結果。
3、獲取到結果rowid
目前知道了起始rowid和終止rowid,以及第一行和第四行為操作結果。可以透過試算的方法獲取到結果集合rowid。
點陣圖索引的特點:
1.Bitmap 索引的儲存空間節省
2.Bitmap 索引建立的速度快
3.Bitmap 索引允許鍵值為空
4.Bitmap 索引對錶記錄的高效訪問
建立點陣圖索引:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017124/viewspace-2888803/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle索引梳理系列(六)- Oracle索引種類之函式索引Oracle索引函式
- oracle的索引Oracle索引
- oracle重建索引(一)Oracle索引
- oracle重建索引(三)Oracle索引
- 0707_oracle 索引Oracle索引
- oracle重建索引(二)Oracle索引
- Oracle OCP(25):索引Oracle索引
- Oracle虛擬索引Oracle索引
- Oracle:全文索引Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(四)三星級索引Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(二)索引過濾列概述Oracle索引
- oracle索引核心過程Oracle索引
- oracle之 反向鍵索引Oracle索引
- Oracle的全文索引Oracle索引
- 【TUNE_ORACLE】Oracle索引設計思想(一)索引片和匹配列概述Oracle索引
- oracle複合索引介紹(多欄位索引)Oracle索引
- oracle 索引和不走索引的幾種形式Oracle索引
- Oracle大表快速建立索引Oracle索引
- 【Oracle】 索引的掃描方式Oracle索引
- Oracle vs PG 索引資訊Oracle索引
- Oracle中的B樹索引Oracle索引
- Oracle如何建立B樹索引Oracle索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- Oracle如何實現B樹索引Oracle索引
- [20201110]oracle建立索引nosrt.txtOracle索引
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- Oracle索引,看這篇就夠了Oracle索引
- oracle order by索引是否使用的情況Oracle索引
- 【INDEX】Oracle 索引常見知識梳理IndexOracle索引
- 【ASK_ORACLE】關於Oracle索引分裂你需要知道的Oracle索引
- Oracle中表空間、表、索引的遷移Oracle索引
- oracle全文索引之commit與DML操作Oracle索引MIT
- Oracle索引塊分裂split資訊彙總Oracle索引
- 【INDEX】Oracle分割槽索引技術詳解IndexOracle索引
- 如何讓oracle的select強制走索引Oracle索引
- Oracle中的虛擬列索引-nosegment indexOracle索引Index
- Oracle like、不等於、隱式轉換走索引與不走索引情況Oracle索引
- oracle全文索引之幾個關鍵表Oracle索引