程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle數據庫中怎樣選擇合適索引類型

Oracle數據庫中怎樣選擇合適索引類型

編輯:Oracle數據庫基礎

索引的相關作用就好比字典的目錄。根據字典的目錄,我們就可以快速的找到我們需要的相關條目。數據庫的作用也是。通過Oracle數據庫的索引,我們就可以可以迅速的來定位記錄的位置,而不必去定位整個表。

雖然說,在表中是否創建索引,不會影響到Oracle數據庫的使用,也不會影響Oracle數據庫語句的使用。這就好像即使字典沒有目錄的話,用戶仍然可以使用它一樣。可是,若字典沒有目錄,那麼可想而知,用戶要查某個條目的話,其不得不翻遍整本字典。數據庫也是如此。

若沒有建立相關索引的話,則數據庫在查詢記錄的時候,不得不去查詢整個表。當表中的記錄比較多的時候,其查詢效率就會很低。所以,合適的索引,是提高數據庫運行效率的一個很好的工具。

不過,並不是說表上的索引越多越好。過之而不及。故在數據庫設計過程中,還是需要為表選擇一些合適的索引。寧缺勿濫,這是建立索引時的一個遵循標准。在理論上,雖然一個表可以設置無限的索引。但是,數據庫管理員需要知道,表中的索引越多,維護索引所需要的開銷也就越大。

每當數據表中記錄有增加、刪除、更新變化的時候,數據庫系統都需要對所有索引進行更新。故數據庫表中的索引絕對不是多多益善。具體來說,在索引建立上,筆者對大家有如下建議。在基數小的字段上要善於使用位圖索引。

基數是位圖索引中的一個基本的定義,它是指Oracle數據庫表中某個字段內容中不重復的數值。如在員工信息表中的性別字段,一般就只有男跟女兩個值,所以,其基數為2;婚姻狀況字段的話,則其只有已婚、未婚、離婚三種狀態,其基數就為3;民族一覽內也是只有有限的幾個值。

對於要查詢基數小的字段,如現在用戶想查找所有婚姻狀況為“已婚”的“女性”時,利用位圖索引可以提高查詢的效率。這主要是因為標准索引是通過在索引中保存排序過的索引列以及對應的ROWID來實現的。若我們在基數小的列上建立標准索引的話,則其會返回大量的記錄。

而當我們在創建位圖索引的時候,在Oracle會對整個表進行掃描,並且會為索引列的每個取值建立一個位圖。若內容相同,則在位圖上會以一個相同的數字表示。此時,若這個字段的基數比較小的話,則若需要實現對整個字段的查詢的話,效率就會非常的高。因為此時,數據庫只要位圖中數字相同的內容找出來即可。

除了在數據表某列基數比較小的情況下,采用位圖索引外,我們往往在一些特殊的情況下,也會建議采用位圖索引。最常見的情況是,在Where限制條件中,若我們多次采用AND或者OR條件時,也建議采用位圖索引。因為當一個查詢飲用了一些部署了位圖索引的列的時候,這些位圖可以很方便的與AND或者Or 運算符操作結合以快速的找出用戶所需要的記錄。

但是,這裡要注意,不是在條件語句中包含運算符的時候,采用位圖索引都能夠提供比較高的效率。一般來說,只有AND 或者OR運算符的時候,位圖索引才會比較具有優勢。若此時用戶采用大於號或者不等於號作為條件語句中的限制條件的時候,則往往采用標准索引具有更大的優勢。

所以,筆者在Oracle數據庫設置中,一般只有在三種情況下才采用位圖索引。一是列的基數比較小,而有可能需要根據這些字段的內容查找相關的記錄;二是在條件語句中,用到了AND或者OR運算符的時候。除了這兩種情況外,最好能夠采用其他適合的索引。

第三種情況是,需要用到NULL作為查詢的限制條件。因為標准查詢一般情況下,會忽略所有的NULL值列。也就是說,若需要查詢“所有沒有身份證號碼”的員工的信息的時候,標准索引並不能夠起到加速查詢速度的作用。此時,就需要采用位圖索引。因為位圖索引會記錄相關的NULL值列信息。

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