(一)索引的概念
索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的訪問路徑,減少磁碟i/o,提高檢索效率。
索引由索引值及記錄相應實體地址的rowid兩個部分構成,並按照索引值有序排列,rowid可以快速定位到資料庫表符合條件的記錄。可以這樣理解,將索引看作是一本書的目錄,索引值即為目錄的標題,rowid即為目錄的頁碼。
(二)索引的更新策略
隨著標準資料的插入、刪除、修改,索引表中的資訊會自動更新,具體過程:
l 向表中插入資料時,系統會在索引的葉子節點插入與表對應的索引條目;
l 刪除表中的資料時,系統自動刪除相關的索引條目,但是空間並沒有**,也不會分配給新的索引條目使用,只有將整個葉子節點刪除,空間才會被**;
l 修改索引表中的資料時,系統會刪除索引葉子節點的條目,然後重新分配索引條目
從更新策略可知,索引並不是建立的越多越好。索引在提高查詢效率的同時,會降低資料插入、刪除、更新的效率。oracle建議將索引與表分散在不同的表空間中,最好分散在不同的磁碟上,以提高效率。
(三)索引結構
資料庫有2種索引結構:平衡樹索引結構(b_tree)和點陣圖索引結構(bitmap)。
(1) 平衡樹索引結構
整個索引結構由根節點、分支節點、葉子節點三部分構成,其中分支節點可以有多層。根節點的資訊指向下一層分支節點,最底層的分值節點指向葉子節點,葉子節點儲存索引條目資訊。索引條目資訊由4部分構成:索引基於的列資訊(index entry header)、索引列的長度(key column length)、索引值(key column value)及索引對應的rowid。b_tree索引占用空間多,適合索引取值範圍廣(基數大)、重複率低的應用。
圖.平衡樹索引結構圖
(2)位圖索引結構
位圖結構也是按平衡樹組織的,但是在葉子節點每個索引值對應乙個點陣圖而不是乙個rowid,乙個位圖裡面可以包含乙個或多個rowid,位元到rowid的對映是通過索引中的對映函式實現的。位圖索引適合於取值範圍小,待索引資料重複率高的列。
圖.點陣圖索引結構
(四)建立索引
可以使用create index建立索引:
create解釋:unique:建立唯一性索引,預設非唯一性[unique
][bitmap
]index
[schema.
]index_nameon[
schema.
]table_name(index_expr[
asc | desc
][,...])
[pctfree integer][
pctused integer][
initrans integer][
storage(storage_clause)][
logging
][nologging][
online][
tablespace tablespace_name][
nocompress | [ compress integer]]
[sort|nosort][
reverse][
noparallel |[ parallel integer
]]
bitmap:建立位圖索引,預設b_tree索引
用於指定索引值的排列順序,asc為公升序,desc為降序
pctfree | pctused | initrans設定資料塊的使用
storage:設定索引的儲存方式,若不指定,則繼承表空間的儲存引數設定
logging | nologging:指明索引建立過程是否寫入重做日誌檔案,預設寫入
online:允許在建立索引或重建索引時執行dml(insert/update/delete等需要commit的語句)語句,但不允許執行ddl(create/alter/drop等不需要commit的語句)操作
tablespace:指明儲存索引的表空間
cmpress | nocompress:是否壓縮索引中的重複資料,預設不壓縮
sort | nosort:在預設情況下,建立索引時會首先對錶中資料進行排序,假如我們的資料已經排好序了,我們可以選擇nosort,加快索引建立的速度;
reverse:建立反序索引
noparallel | parallel:指明是否允許並行建立索引,預設值為noparallel
【未完待續。。。】
oracle 索引與索引表管理
一 索引的概念 索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的訪問路徑,減少磁碟i o,提高檢索效率。索引由索引值及記錄相應實體地址的rowid兩個部分構成,並按照索引值有序排列,rowid可以快速定位到資料庫表符合條件的記錄。可以這樣理解,將索引看作是一本書的目錄,索引值即為目錄的...
ORACLE索引表學習
索引表與標準表的差異 一 索引表中的rowid列存放的是 邏輯 實體地址。而標準表的rowid偽列中儲存的則是真實的實體地址,這是兩者之間最本質的區別。另外其他幾個方面的差異都是因為有這個差異存在而存在。或者說,它是索引表優勢的根源。二 索引表對記錄的訪問是基於主鍵的,也就是說,根據邏輯的rowid...
Oracle表增加索引
oracle表加索引 加快資料查詢的利器 索引是對錶中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。通俗一點地講,索引對資料庫中的表而言就相當於一本書的目錄。1.普通索引,僅加速查詢 2.全文索引,用來對大表的文字域 char,varchar,text 進行索引。對文字的...