Oracle 索引介紹

2021-09-12 05:19:48 字數 2280 閱讀 5432

oracle 建立索引要做到三個適當:即[b]在適當的表上[/b]、[b]適當的列上[/b]建立[b]適當數量[/b]的索引。

具體的來說,要做到這個三個適當有如下幾個要求。

一、根據表的大小來建立索引

雖然給表建立索引,可以提高查詢的效率。但是資料庫管理員需要注意的是,索引也需要一定的開銷的。為此並不是說給所有的表都建立索引,那麼就可以提高資料庫的效能。恰恰相反,如果不管三七二十一,給所有的表都建立了索引,那麼其反而會給資料庫的效能造成負面的影響。因為此時濫用索引的開銷可能已經遠遠大於由此帶來的效能方面的收益。所以,資料庫管理員首先需要做到,為合適的表來建立索引,而不是為所有的表建立索引。

一般來說,不需要為比較小的表建立索引,而對於大表的話,則需要進行實際情況實際分析。簡單一點的,可以根據大致的比率來確定。

二、根據列的特徵來建立索引

列的特點不同,索引建立的效果也不同。資料庫管理員需要了解為哪些列建立索引可以起到事倍功半的效果。同時也需要了解為哪些列建立索引反而起到的是事倍功半的效果。

三、在乙個表上建立多少索引合適

通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。因此,要找到乙個合適的平衡點。

[b]索引型別介紹[/b]

[b]1,b*樹索引(b*tree index)[/b]

b*樹索引就是我們常說的'傳統'的索引。b*樹索引結構中,所有的葉子都在同一層中,整個索引結構資料塊的層數稱之為索引的高度(height),因此,無論根據索引查詢表中的哪一條記錄,所執行的i/o次數都是相同的。這就是b*樹索引中的『b』的含義,即balance(平衡)之意。換句行話說,b*樹索引是高度平衡的(height balanced)。另外乙個術語是分支層數(blevel),他等於height-1。

b*樹索引子類:

1)反向鍵索引

反向鍵索引是一種將索引鍵『反轉』的b*樹索引,通過把鍵『反轉』,將本來連續的鍵值變得非常『離散』,這些本來應該放在乙個索引資料塊上的連續鍵值(一般有序列或者時間戳產生)會被分散到不同的索引塊上,從而避免索引塊爭用的問題。

2)降序索引

3)壓縮鍵索引

b*樹索引的壓縮只能應用於復合索引。壓縮鍵復合索引(compressed key index)的基本概念是:把每個索引鍵條目分解為兩個部分:字首(prefix)和字尾(postfix)。字首是指復合索引中具有大量重複值的部分,餘下的索引條目中唯一的部分就是字尾。

壓縮鍵索引不僅能起到節約儲存空間的作用,而且還能有效調高dml操作的效率。但是,需要注意的是:如果你的系統是乙個cpu繁忙的系統,那麼再使用壓縮鍵索引只能適得其反,這會減慢你的處理速度(因為壓縮鍵索引的資料結構更加複雜,他會額外增加cpu的工作量)。如果你的系統i/o比較繁忙,那麼使用壓縮鍵索引會加快處理速度。所以,壓縮鍵使用與否一定要視你的系統實際情況而定。

總結:a,壓縮索引使得索引變小,因而能加速資料的檢索

b,一定要考慮復合索引中各列的順序,把重複值較多的列放在索引前部(字首)

c,在併發性較高的系統中,壓縮鍵索引會潛在的鎖住更多的行資料,從而導致系統的dml效能較差,因此,建議在高併發性的系統中不要使用壓縮索引

[b]2,位圖索引(bitmap index)[/b]

位圖索引的目的是提供乙個指向所給鍵值對應資料行的指標(rowid)。在普通的索引中,這是通過儲存每乙個鍵值對應資料行的rowid來實現的,通常索引條目和資料行之間存在著一種一對一的關係:乙個索引條目就指向一行。而對於位圖索引,他使用鍵值的位圖來取代普通索引的rowid列表,乙個位圖索引條目可能會指向多行資料。位圖索引適用於高度重複且通常唯讀的資料表。在oltp系統中,由於存在著併發性的效能問題,所以不能考慮使用位圖索引。而以『唯讀』為主要特徵的data warehouse/mis/bi/olap應用是點陣圖索引的首選。

使用位圖索引的幾個條件:

1,一般來說,位圖對於低基數的單列(single-column indexs with low cardinality)索引比較有效,低基數列是指該列僅有少數不同的值。

2,位圖索引在『唯讀』(read-only)或以讀為主的低基數環境下會比b*樹索引快

在乙個資料倉儲/mis/bi等olap型應用系統中,合理的使用盡可能多的點陣圖索引是非常有用的,但是在寫密集型的oltp型應用中,位圖索引是極不合適的。

[b]3,基於函式的索引(function based index)[/b]

基於函式的索引就是你可以在表字段上建立基於函式或者表示式的索引,他能有效提高where子句中含有函式的sql語句的效能。他計算函式或者表示式的值,並把得到的值儲存在索引中,然而,當oracle在表上處理insert或則update語句的時候,他需要在維護基於函式的索引時額外增加了函式計算步驟,因此,可能會造成些微的效能下降。

ORACLE索引介紹

什麼是索引 索引是建立在表的一列或多個列上的輔助物件,目的是加快訪問表中的資料 oracle儲存索引的資料結構是b 樹,位圖索引也是如此,只不過是葉子節點不同b 數索引 索引由根節點 分支節點和葉子節點組成,上級索引塊包含下級索引塊的索引資料,葉節點包含索引資料和確定行實際位置的rowid。使用索引...

Oracle索引介紹

缺省級別的索引就是 b tree 查詢順序 先查詢各個節點和索引的葉節點,然後再查詢表自身的行資料.注意 1.這就是有時候oracle優化器會全表掃瞄,而不是查詢索引,因為全表掃瞄有時候更快.2.如果所有是建立在多個列的時候,那麼第一列leading column非常重要 3.假設有乙個多列索引 級...

Oracle索引概括介紹

索引類似與書的目錄結構,可以根據目錄中的頁碼快速找到需要的內容。索引是乙個單獨的 物理的資料庫結構,它是某個表中一列或者幾列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。使用索引可以快速訪問資料庫表中的特定資訊。oracle 自動維護索引,插入 刪除 更新表中資料時,自動更新索引。當...