(一)索引的概念
索引是一種與表或簇相關的數據庫對象,能夠為數據的查詢提供快捷的存取路徑,減少磁盤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][BITMAP] INDEX [schema.]index_name ON [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]]
解釋:
【未完待續。。。】