新聞中心
筆者認為對于數(shù)據(jù)庫索引的作用,應(yīng)該分兩面看。除了肯定其對數(shù)據(jù)庫性能帶來的正面影響外,還需要認識到其可能帶來的負面影響。只有如此,數(shù)據(jù)庫管理員才能夠在正確的場合使用正確的索引。要知道有時候一個錯誤的索引可能引發(fā)死鎖,并導(dǎo)致數(shù)據(jù)庫性能的急劇下降或進程終止;而如果數(shù)據(jù)庫管理員能夠做出一個正確的判斷的話,那么可以使那些本來要運行幾個小時甚至一天的進程在幾分鐘之內(nèi)就能夠完成。所以這兩個差距是一個天上、一個地下。故筆者希望通過這篇文章能夠讓各位讀者了解索引在使用過程中的限制,了解索引并不是萬能的。

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、東豐網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、電子商務(wù)商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為東豐等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
一、索引對數(shù)據(jù)庫性能的影響跟數(shù)據(jù)選擇性直接掛鉤。
當用戶從數(shù)據(jù)表中查詢數(shù)據(jù)時,Oracle數(shù)據(jù)庫提供了兩種查詢的方式。一是從表中讀取每一行,就是大家常說的全表掃描;二是通過ROWID一此讀取一行。當表中記錄比較多的時候,很明顯第二種方式能夠更快的定位記錄內(nèi)容。而索引其實就是建立在這個查詢原理之上的。如現(xiàn)在某個表中有300多萬條記錄,而現(xiàn)在用戶可能只需要了解其中的10條記錄信息。此時如果使用索引標識讀取的塊,則可以執(zhí)行比較少的I/O,數(shù)據(jù)庫系統(tǒng)會很快找到用戶所需要的內(nèi)容。而如果沒有使用索引的話,則需要讀取表中所有的塊。
如果在這個表中加入了索引,那么到底對數(shù)據(jù)庫的性能影響有多大呢?這個就不好說了,因為其跟很多因素相關(guān)。如跟數(shù)據(jù)選擇性直接相關(guān)。如果用戶的數(shù)據(jù)非常具有選擇性,則表中家功能只有很少的行匹配索引值,則Oracle將能夠快速查詢匹配所引值得ROWID的索引,并且可以快速查詢少量的相關(guān)表快。如還是上面這個表中,其如果存儲有某個市的所有常住人口信息,其中身份證號碼肯定是少不了的。如此時用戶想根據(jù)身份證號碼來查詢某個人的信息時,那么數(shù)據(jù)庫能夠在很短的時間內(nèi)給出響應(yīng)。這主要是因為用戶提供的數(shù)據(jù)非常具有選擇性,基本上跟數(shù)據(jù)庫中的索引值是一一對應(yīng)的。而如果用戶想通過出身年月信息來查詢信息的話,則其數(shù)據(jù)庫反映的速度就會比較慢了。
可見索引對數(shù)據(jù)庫性能的影響直接跟數(shù)據(jù)的選擇性掛鉤。這對于數(shù)據(jù)庫管理員設(shè)計索引時很有啟發(fā)性。如數(shù)據(jù)庫管理員在設(shè)計索引時,最好能夠選擇哪些具有唯一性的字段或者重復(fù)性比較少的字段。如此的話,索引對于數(shù)據(jù)庫性能來說才有比較大的價值。
二、索引效果跟數(shù)據(jù)庫中記錄的具體存儲位置相關(guān)。
還是上面這張表中,如果現(xiàn)在用戶想查找年齡超過100歲的老人,要對他們?nèi)ミM行慰問。假設(shè)現(xiàn)在符合這個條件的人只有10人。那么此時索引對數(shù)據(jù)庫性能會有怎么樣的影響呢?此時顯然數(shù)據(jù)非常具有選擇性,但是并不一定索引能夠起到很好的效果。這還要看其具體存儲的位置。如果這十條記錄在硬盤中存儲的物理位置比較近,如可能在同一個扇區(qū)之內(nèi),則此時索引對于數(shù)據(jù)庫性能的影響就會比較大,能夠在最短時間內(nèi)找到符合條件的數(shù)據(jù)。但是如果相關(guān)的行在表中存儲的位置并不互相靠近,則這個索引的效果就會逐漸減少。因為如果匹配索引值的數(shù)據(jù)分散在硬盤上的多個酷愛時,則必須從表中選擇多個單獨的塊以滿足查詢。
數(shù)據(jù)庫管理員對于這一點要特別注意。因為此時如果數(shù)據(jù)庫管理員查用了索引的話,那么很可能是畫蛇添足。筆者建議,當數(shù)據(jù)庫管理員發(fā)現(xiàn)數(shù)據(jù)分散在表的多個塊的時候,最好是不要使用索引,而是執(zhí)行全表掃描。此時執(zhí)行掃描反而會比執(zhí)行索引的效率更高。因為在執(zhí)行全表掃描的時候,Oracle數(shù)據(jù)庫系統(tǒng)會使用多塊讀取以加速掃描表。而如果采用索引的話,則其讀取數(shù)據(jù)時是單塊讀取的。而由于數(shù)據(jù)存儲在多個塊中,所以其讀取的速度反而會更慢。
由此可見,Oracle數(shù)據(jù)庫管理員在數(shù)據(jù)庫設(shè)計與日常維護中,也要想辦法能夠讓數(shù)據(jù)盡量存儲在臨近的位置。如盡量減少在同一個服務(wù)器中不要部署不同的應(yīng)用服務(wù),防止硬盤產(chǎn)生過多的磁盤碎片;如需要采用多塊硬盤的話,則最好通過表空間把類似的表放在同一個表空間中,從而讓相關(guān)的行在表zhognd存儲位置盡量靠近,以提高索引的使用效果。也就是說,數(shù)據(jù)庫管理員在使用索引的時候,為表中的字段建立了索引這只是其工作的第一步。在后續(xù)數(shù)據(jù)庫維護與調(diào)整的過程中,仍然要注意數(shù)據(jù)存儲位置對索引的影響。
【編輯推薦】
- Oracle設(shè)置系統(tǒng)參數(shù)進行性能優(yōu)化
- 淺談Oracle性能優(yōu)化可能出現(xiàn)的問題
- 詳解Oracle數(shù)據(jù)庫中文全文索引
當前標題:深度揭露Oracle索引使用中的限制
URL標題:http://www.5511xx.com/article/dpddodp.html


咨詢
建站咨詢
