oracle 索引與索引表管理

2021-10-02 17:24:32 字數 2403 閱讀 2732

(一)索引的概念

索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的訪問路徑,減少磁碟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 索引與索引表管理

一 索引的概念 索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的訪問路徑,減少磁碟i o,提高檢索效率。索引由索引值及記錄相應實體地址的rowid兩個部分構成,並按照索引值有序排列,rowid可以快速定位到資料庫表符合條件的記錄。可以這樣理解,將索引看作是一本書的目錄,索引值即為目錄的...

ORACLE索引表學習

索引表與標準表的差異 一 索引表中的rowid列存放的是 邏輯 實體地址。而標準表的rowid偽列中儲存的則是真實的實體地址,這是兩者之間最本質的區別。另外其他幾個方面的差異都是因為有這個差異存在而存在。或者說,它是索引表優勢的根源。二 索引表對記錄的訪問是基於主鍵的,也就是說,根據邏輯的rowid...

Oracle表增加索引

oracle表加索引 加快資料查詢的利器 索引是對錶中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。通俗一點地講,索引對資料庫中的表而言就相當於一本書的目錄。1.普通索引,僅加速查詢 2.全文索引,用來對大表的文字域 char,varchar,text 進行索引。對文字的...