在Oracle創(chuàng)建索引的實(shí)際操作中會(huì)出現(xiàn)的限制條件
在Oracle創(chuàng)建索引的實(shí)際操作中有一些限制條件。就是說(shuō)表或是列建立的相關(guān)索引并不是越多越好,而是相關(guān)索引建的越多,反而會(huì)影響到Oracle數(shù)據(jù)庫(kù)在運(yùn)行中的整體性能,所以,在建立索引的時(shí)候,仍然會(huì)有一些限制條件。
一是不要對(duì)一些記錄內(nèi)容比較少的表建立索引
在一個(gè)應(yīng)用系統(tǒng)設(shè)計(jì)的時(shí)候,如設(shè)計(jì)一個(gè)ERP系統(tǒng)的數(shù)據(jù)庫(kù),其雖然有幾千張表。但是,并不是每張表都有大量記錄的。相反,其中有近一半左右的數(shù)據(jù)表,可能其存儲(chǔ)的數(shù)據(jù)不會(huì)超過(guò)百條。如員工登陸帳戶密碼表、企業(yè)部門信息表等等。對(duì)于這些記錄內(nèi)容比較少的表,我們建立最好不要為其建立索引。無(wú)論是表上的,還是字段上,都不要Oracle建立索引。
二是若表中的內(nèi)容比較大
但是,這個(gè)表基本上不怎么查詢的時(shí)候,則只需要在表上建立索引即可;而不需要在字段上建立索引。如現(xiàn)在在ERP系統(tǒng)中,有一張表是“AD_Table”。其存儲(chǔ)的是這個(gè)數(shù)據(jù)庫(kù)中相關(guān)表的信息。這張表只有在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候才會(huì)用到。故這張表中的記錄雖然比較多,但是由于用戶用的比較少,所以,一般沒(méi)有必要為這張表建立列級(jí)別上的索引。而直接用表索引來(lái)代替。
三是在一些NULL字段上
要根據(jù)實(shí)際情況來(lái)判斷是否要建立索引。如現(xiàn)在有一張人事檔案的表格,其上面有兩個(gè)字段,分別為“身份證號(hào)碼”與“地區(qū)”。有時(shí)會(huì)為了某個(gè)原因,企業(yè)需要所有員工都在系統(tǒng)中登記他們的身份證號(hào)碼,以方便他們辦工資卡、社會(huì)保險(xiǎn)等等。所以人事管理可能需要經(jīng)常的查詢系統(tǒng),看看有沒(méi)有沒(méi)有身份證號(hào)碼的員工信息。
此時(shí),就需要利用條件“IS NULL”來(lái)查詢我們所需要的記錄。故為了提高查詢效率,若某個(gè)記錄可能為空,并且經(jīng)常需要以NULL為條件進(jìn)行查詢的時(shí)候,則最好給這個(gè)字段添加一個(gè)索引,并且最好建立位圖索引。相反,若雖然可能會(huì)以NULL這個(gè)條件作為查詢的限制語(yǔ)句,但是,用的不是很多的時(shí)候,則就沒(méi)有必要為其建立索引。
建議三:多表連接查詢的索引設(shè)計(jì)
如現(xiàn)在有一個(gè)人事管理系統(tǒng)。人事經(jīng)理想知道員工的社保繳納情況。他需要知道員工的姓名、職務(wù)、戶籍性質(zhì)(農(nóng)民戶口跟居民戶口費(fèi)用不一樣)、繳納的情況等等。但是,這些信息包含在不同的表中。因?yàn)闉榱颂岣逴racle數(shù)據(jù)庫(kù)的性能,在表中存儲(chǔ)的可能只是某些序號(hào),而不是具體的內(nèi)容。
如在社保表中,存儲(chǔ)的是員工對(duì)應(yīng)的編號(hào),而不是員工的名字。所以,要得到這份報(bào)表的話,就可能需要關(guān)聯(lián)員工基本信息表、公司組織結(jié)構(gòu)表等表格,才能夠查詢到用戶所需要的內(nèi)容。為此,就需要利用Join語(yǔ)句,把這些表格關(guān)聯(lián)起來(lái)。為了提高數(shù)據(jù)庫(kù)的查詢效率,這些用來(lái)關(guān)聯(lián)的字段,最好能夠建立索引。這可以顯著的提高查詢的速度。
建議四:在表的更新速度與查詢速度之間尋求一個(gè)平衡點(diǎn)
眾所周知,索引本身并不影響數(shù)據(jù)庫(kù)的使用,其主要是為了提高Oracle數(shù)據(jù)庫(kù)的查詢效率。但是,由于當(dāng)數(shù)據(jù)庫(kù)的表中的數(shù)據(jù)更新的時(shí)候,包括記錄的增加、刪除、更改等等,都會(huì)對(duì)雖有的索引進(jìn)行更新。
很明顯,索引雖然可以提高查詢速度。但是,也會(huì)對(duì)一些表的更新操作產(chǎn)生不良的影響。當(dāng)在表中建立的索引越多,這個(gè)不利影響也會(huì)越大。故Oracle數(shù)據(jù)庫(kù)管理員在設(shè)置索引的時(shí)候,還需要注意,在這兩個(gè)之間需要一個(gè)均衡點(diǎn)。
按照一般的理論來(lái)說(shuō),當(dāng)某個(gè)表多數(shù)用來(lái)查詢、更新相對(duì)來(lái)說(shuō)比較上的話,則要多多采用索引。相反,當(dāng)某個(gè)表記錄更新居主導(dǎo),查詢相對(duì)來(lái)說(shuō)比較少的話,則不要建立太多的索引,避免對(duì)更新的速度差生不利影響。在實(shí)際工作中,若某個(gè)表頻繁的被視圖所調(diào)用的話,則最好就好設(shè)置比較多的索引了。
【編輯推薦】