標籤:ack class schema 設定 map tor insert 概念 ctf
(一)索引的概念
索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的存取路徑,減少磁碟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_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]]
解釋:
UNIQUE:建立唯一性索引,預設非唯一性
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]索引與索引表管理