程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle位圖索引相關特點介紹

Oracle位圖索引相關特點介紹

編輯:Oracle數據庫基礎

我們都知道Oracle中通過位圖索引可以在很大的程度上提高查詢的效率,而以下的文章主要要介紹的是Oracle位圖索引的相關特點及其使用的時機,如果你想了解的更多的話,以下的文章會給你提供更多的相關知識。

在數據庫中(包括SQL Server數據庫),對於這種基數比較小的列,如果只有有限的幾個固定值,如上表中的性別、婚姻狀況等等,要為其建立索引的話,采用的就應該是位圖索引,而不是B樹索引。

位圖索引為什麼可以提高基數比較小的表的查詢速度呢?這主要是因為在創建位圖索引的時候,數據庫往往會對整個表進行掃描,並未索引列的每個取值建立一個位圖(位圖索引的名字也由此而來)。在這個位圖中,為表中的每一行使用一個位元來表示該行是否包含該位圖的索引列的取值。

位元到行的ROWID的對應關系通過位圖索引中的應收函數來完成。如此的話,位圖索引就能夠以一種完全不同的內部機制來完成與B樹索引相同的功能。

另外值得一提的是,對於B樹索引而言,如果在查詢條件語句中采用了AND等操作符號,其查詢的效率會大打折扣。故在數據庫優化中,會建議大家不要使用這些操作符,改用其他操作符代替。不過如果采用位圖索引的話,則沒有這方面的顧慮。如上例所示,假設用戶需要查找已婚的女性,那麼就可以使用如下的語句查詢。

  1. select t.*, t.rowid  
  2. from userinfo t  
  3. where t.merital=’已婚’ and t.sex=0 

這個查詢引用了一些創建了位圖索引的列時,這些位圖可以很方便的與AND或者OR操作符結合以找出想要的數據。數據庫在後台處理的時候,先利用已經創建的位圖進行邏輯運算,然後計算結果位圖中1的個數,就可以查詢到滿足條件的所有記錄。如果查詢到結果後還需要更改數據的話,那麼只需要按照結果位圖中取1的位元對應的ROWID列的值進行映射即可。

位圖索引的使用限制

位圖索引雖然在某些情況下能夠起到比B樹索引更好的效果。但是需要注意的是,並不是在任何場合都有效。如上例所示,如果在員工編號或者員工姓名列中使用的話,反而會降低數據查詢的效率。故其使用仍然受到比較大的限制。

如上面列舉的案例,一般情況下只有在“基數比較小的列中”和“需要使用與和或的運算中”采用位圖索引能夠起到比B樹索引更好的效果。其他情況還是使用B數索引或者函數索引為好。

在Oracle數據庫中,有B樹索引、位圖索引、函數索引等等。具體采用哪種索引,還是要根據不同的情形來對待。隨著數據庫應用越來越復雜,單靠一個B樹索引已經不能夠應付了。如列中包含了表達式或者函數的話,B樹索引或者位圖索引都不能夠用,只有用函數索引。

對於數據庫專家來說,索引的創建與管理或許沒有難度,只需要簡單的幾個語句即可。比較困難的是,如何根據實際情況來選擇合適的索引。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved