索引學習筆記-1(Oracle9i/10g程式設計藝術-深入資料庫體系結構)

oracle_ace發表於2008-03-27
     索引是一個很寬泛的主題,他是開發人員和資料庫DBA之間的一個橋樑,深刻理解索引是資料庫從業人員必須掌握的一個內容。在實際的開發應用中索引使用不當會導致一些系統效能的問題,如果有太多的索引,不僅維護起來極其麻煩,而且還會在一定程度上影響DML的效能,如果索引過少,又會對查詢產生效能上的影響,因此找到一個適當的索引效能的平衡點,對應用的效能影響至關重要。

Oracle索引的概述

B*樹索引:
----------------
所謂傳統的索引,也是Oracle和大多數資料庫最常見的一種索引,B*數索引在一定程度上類似於二叉樹,但並不是一顆二叉樹。通過B*樹索引可以根據索引條目或鍵中記錄行的rowid迅速訪問到相關的行或者行集。

B*樹索引分為以下幾種:
1.索引組織表(Index organized table)
    這是表類中的一種,相比最常用Heap organized table,索引組織表中的資料是按照索引鍵的順序來儲存和排序的。在使用SQL語句訪問表的行為和Heap organized table一致。
 
2.B*樹聚簇索引(B*tree cluster index)          
用於對聚簇鍵建立索引,在傳統的B*樹索引中,鍵都指向一行,而對於B*樹聚簇索引會指向一個塊,這個塊中包含與這個聚簇索引相關的多行
 
3.降序索引(descending index)
此索引允許資料在索引結構中按照“從大到小”的順序排序,而不是按“從小到大”的順序排序。

4.反向鍵索引(reverse key index)
這類索引其鍵中的位元組值會反轉儲存,比如利用一個序列來生成主鍵,這個序列將生成諸如7071,7072,7073....類似的值。倘若我們使用一個傳統的B*樹索引的話,這些值就可能會放到同一個索引塊上,這樣就會加劇這一葉子結點塊的熱塊競爭。如果此時利用反向鍵索引,那麼Oracle就會邏輯的對1707,2707,3707....等建立索引,那麼在將資料放在索引中之前,將先把所儲存資料的位元組反轉,這樣原本可能在索引中相鄰放置的值在位元組反轉之後就會相距很遠,通過反轉位元組,對索引的插入的資料就會放在多個塊上。 

點陣圖索引(bitmap index):
------------------------------------
在傳統的B*樹索引中,索引條目和資料行之間是一一對應的關係,對於點陣圖索引來說,一個索引條目利用一個點陣圖同時指向多行,因此點陣圖索引適用於高度重複而且通常只讀的資料

點陣圖連線索引(bitmap join index):
-----------------------------------------------------

函式索引(function-based index):
---------------------------------------------
可以把基於函式的索引看成是一個虛擬列上的索引。這種索引可以用於加快諸如:
select * from t where function(my_column) = value;這樣類似的查詢。
其中function(my_column)是提前計算出來並儲存在function-based index中.

應用域索引(application domain index):
------------------------------------------------------
這是一種自行構建的索引,可能儲存在Oracle中也可能儲存在Oracle之外。Oracle Text Search的索引就是一個例子,有一點需要注意的是這裡建立的索引並不一定需要使用傳統的索引結構。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12361284/viewspace-218028/,如需轉載,請註明出處,否則將追究法律責任。

相關文章