程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 在Oracle創建索引的實際操作中會出現的限制條件

在Oracle創建索引的實際操作中會出現的限制條件

編輯:Oracle數據庫基礎

在Oracle創建索引的實際操作中有一些限制條件。就是說表或是列建立的相關索引並不是越多越好,而是相關索引建的越多,反而會影響到Oracle數據庫在運行中的整體性能,所以,在建立索引的時候,仍然會有一些限制條件。

一是不要對一些記錄內容比較少的表建立索引

在一個應用系統設計的時候,如設計一個ERP系統的數據庫,其雖然有幾千張表。但是,並不是每張表都有大量記錄的。相反,其中有近一半左右的數據表,可能其存儲的數據不會超過百條。如員工登陸帳戶密碼表、企業部門信息表等等。對於這些記錄內容比較少的表,我們建立最好不要為其建立索引。無論是表上的,還是字段上,都不要Oracle建立索引。

二是若表中的內容比較大

但是,這個表基本上不怎麼查詢的時候,則只需要在表上建立索引即可;而不需要在字段上建立索引。如現在在ERP系統中,有一張表是“AD_Table”。其存儲的是這個數據庫中相關表的信息。這張表只有在數據庫設計的時候才會用到。故這張表中的記錄雖然比較多,但是由於用戶用的比較少,所以,一般沒有必要為這張表建立列級別上的索引。而直接用表索引來代替。

三是在一些NULL字段上

要根據實際情況來判斷是否要建立索引。如現在有一張人事檔案的表格,其上面有兩個字段,分別為“身份證號碼”與“地區”。有時會為了某個原因,企業需要所有員工都在系統中登記他們的身份證號碼,以方便他們辦工資卡、社會保險等等。所以人事管理可能需要經常的查詢系統,看看有沒有沒有身份證號碼的員工信息。

此時,就需要利用條件“IS NULL”來查詢我們所需要的記錄。故為了提高查詢效率,若某個記錄可能為空,並且經常需要以NULL為條件進行查詢的時候,則最好給這個字段添加一個索引,並且最好建立位圖索引。相反,若雖然可能會以NULL這個條件作為查詢的限制語句,但是,用的不是很多的時候,則就沒有必要為其建立索引。

建議三:多表連接查詢的索引設計

如現在有一個人事管理系統。人事經理想知道員工的社保繳納情況。他需要知道員工的姓名、職務、戶籍性質(農民戶口跟居民戶口費用不一樣)、繳納的情況等等。但是,這些信息包含在不同的表中。因為為了提高Oracle數據庫的性能,在表中存儲的可能只是某些序號,而不是具體的內容。

如在社保表中,存儲的是員工對應的編號,而不是員工的名字。所以,要得到這份報表的話,就可能需要關聯員工基本信息表、公司組織結構表等表格,才能夠查詢到用戶所需要的內容。為此,就需要利用Join語句,把這些表格關聯起來。為了提高數據庫的查詢效率,這些用來關聯的字段,最好能夠建立索引。這可以顯著的提高查詢的速度。

建議四:在表的更新速度與查詢速度之間尋求一個平衡點

眾所周知,索引本身並不影響數據庫的使用,其主要是為了提高Oracle數據庫的查詢效率。但是,由於當數據庫的表中的數據更新的時候,包括記錄的增加、刪除、更改等等,都會對雖有的索引進行更新。

很明顯,索引雖然可以提高查詢速度。但是,也會對一些表的更新操作產生不良的影響。當在表中建立的索引越多,這個不利影響也會越大。故Oracle數據庫管理員在設置索引的時候,還需要注意,在這兩個之間需要一個均衡點。

按照一般的理論來說,當某個表多數用來查詢、更新相對來說比較上的話,則要多多采用索引。相反,當某個表記錄更新居主導,查詢相對來說比較少的話,則不要建立太多的索引,避免對更新的速度差生不利影響。在實際工作中,若某個表頻繁的被視圖所調用的話,則最好就好設置比較多的索引了。

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