位圖索引 btree索引

位圖索引(bitmpa index)簡介:
傳統的索引使用B樹,通過索引來查找葉子。而位圖索引保存rowid的位圖,該位圖指出哪個行對應與索引項,若位被設置,則指出對應行包括鍵值,若位不被設置,則不包括。

1、何時使用位圖索引:
位圖索引可以很好的工作在有低基數(Cardinality)的列上,即有不同值的列數少於表中的行數,例如性別,婚姻狀況等等。若列值重複超過數百次,則該列是候選的位圖索引。

在決定是否使用位圖索引時,必須綜合考慮索引方案的以下幾個方面:

(1)性能方面:
位圖索引可以充分的改善有以下特性的查詢性能:
◎where子句包含低或中等基數的列上的多個謂詞。
◎這些低或中等基數的列上的單個謂詞選擇大量的行。
◎位圖索引已經建立在某些或全部的這些低或中等基數的列上。
◎要求表包含許多行。

可以使用多個位圖索引評價單個表上的條件。位圖索引對於包含長where子句的特別複雜查詢是很有用的。位圖索引也可以爲合計類查詢提供最佳的性能。

(2)存儲方面
與多列B樹索引相比,位圖索引可以節約相當可觀的存儲。由於複合B樹索引必須要對這些列中的所有排列進行索引,所以耗費大量的存儲空間是可想而知的。位圖索引很好的解決了這個問題。在查詢期間位圖索引可以高效的結合。

若位圖索引建立在唯一列上,則它比B樹需要更多的空間。但對於每個值重複數百次或上千次的列,位圖索引通常比正常B樹索引的大小要少25%。位圖是按壓縮格式保存的。

但是簡單的比較B樹和位圖索引的相對大小不是一種精確的效率測量方法。因爲不同的性能特性,應該在高基數的數據上保持B樹索引,在低基數的列上建立位圖索引。

(3)維護方面:
位圖索引最適合數據倉庫應用程序(有大量的數據和特定查詢,但並行事務少)。對於這樣的應用

程序,位圖索引提供:
◎多種特定查詢,減少響應時間
◎相對與其他索引技術,減少空間的使用
◎顯著的性能收益,即使在非常低端的硬件上
◎非常高效的並行DML和裝入

用傳統的B樹索引來在空間上全部索引一個大表,可能花費過高,這因爲索引數據可能是表中數據的數倍,位圖索引通常只是表中數據的一小部分。

但是位圖索引不適合OLTP應用程序(有大量的併發事務修改數據)。該索引主要是應用與數據倉庫應用程序中的決策支持(DDS,用戶通常是查詢數據,而不是更新它)。

位圖索引與oracle基於成本優化方法和執行工具結合在一起。他們可以與其他oracle執行方法緊密的結合在一起使用。

並行查詢和並行DML可以與位圖索引一起工作,像與傳統索引一樣,支持並行建立索引,也支持連接索引。

2、位圖索引的其他考慮
爲了使用位圖索引獲取最佳性能和磁盤空間的使用,注意以下幾點
◎使用大的數據塊可以改善排序、檢索位圖索引的效率
◎爲了使壓縮的位圖儘可能小,應該在不包含空值的所有列上說明 not null約束。
◎固定長度的數據類型比變長的更利於緊湊的位圖。

位圖索引可以對空值索引,而其他索引類型卻不可以。初始化參數CREATE_BITMAP_AREA_SIZE和BITMAP_MERGE_AREA_SIZE影響位圖索引的性能。

使用位圖索引有以下一些限制
◎對於有直接裝載的位圖索引,不提供SORTED_INDEX標記
◎執行增加或修改位圖索引列的alter table命令,可能會引起索引無效
◎基於規則的優化器不考慮位圖索引
◎位圖索引不可用於引用完整性檢查。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章