国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

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

    一、索引對(duì)數(shù)據(jù)庫(kù)性能的影響跟數(shù)據(jù)選擇性直接掛鉤。

    當(dāng)用戶從數(shù)據(jù)表中查詢數(shù)據(jù)時(shí),Oracle數(shù)據(jù)庫(kù)提供了兩種查詢的方式。一是從表中讀取每一行,就是大家常說(shuō)的全表掃描;二是通過(guò)ROWID一此讀取一行。當(dāng)表中記錄比較多的時(shí)候,很明顯第二種方式能夠更快的定位記錄內(nèi)容。而索引其實(shí)就是建立在這個(gè)查詢?cè)碇系?。如現(xiàn)在某個(gè)表中有300多萬(wàn)條記錄,而現(xiàn)在用戶可能只需要了解其中的10條記錄信息。此時(shí)如果使用索引標(biāo)識(shí)讀取的塊,則可以執(zhí)行比較少的I/O,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)很快找到用戶所需要的內(nèi)容。而如果沒(méi)有使用索引的話,則需要讀取表中所有的塊。

    如果在這個(gè)表中加入了索引,那么到底對(duì)數(shù)據(jù)庫(kù)的性能影響有多大呢?這個(gè)就不好說(shuō)了,因?yàn)槠涓芏嘁蛩叵嚓P(guān)。如跟數(shù)據(jù)選擇性直接相關(guān)。如果用戶的數(shù)據(jù)非常具有選擇性,則表中家功能只有很少的行匹配索引值,則Oracle將能夠快速查詢匹配所引值得ROWID的索引,并且可以快速查詢少量的相關(guān)表快。如還是上面這個(gè)表中,其如果存儲(chǔ)有某個(gè)市的所有常住人口信息,其中身份證號(hào)碼肯定是少不了的。如此時(shí)用戶想根據(jù)身份證號(hào)碼來(lái)查詢某個(gè)人的信息時(shí),那么數(shù)據(jù)庫(kù)能夠在很短的時(shí)間內(nèi)給出響應(yīng)。這主要是因?yàn)橛脩籼峁┑臄?shù)據(jù)非常具有選擇性,基本上跟數(shù)據(jù)庫(kù)中的索引值是一一對(duì)應(yīng)的。而如果用戶想通過(guò)出身年月信息來(lái)查詢信息的話,則其數(shù)據(jù)庫(kù)反映的速度就會(huì)比較慢了。

    可見(jiàn)索引對(duì)數(shù)據(jù)庫(kù)性能的影響直接跟數(shù)據(jù)的選擇性掛鉤。這對(duì)于數(shù)據(jù)庫(kù)管理員設(shè)計(jì)索引時(shí)很有啟發(fā)性。如數(shù)據(jù)庫(kù)管理員在設(shè)計(jì)索引時(shí),最好能夠選擇哪些具有唯一性的字段或者重復(fù)性比較少的字段。如此的話,索引對(duì)于數(shù)據(jù)庫(kù)性能來(lái)說(shuō)才有比較大的價(jià)值。

    二、索引效果跟數(shù)據(jù)庫(kù)中記錄的具體存儲(chǔ)位置相關(guān)。

    還是上面這張表中,如果現(xiàn)在用戶想查找年齡超過(guò)100歲的老人,要對(duì)他們?nèi)ミM(jìn)行慰問(wèn)。假設(shè)現(xiàn)在符合這個(gè)條件的人只有10人。那么此時(shí)索引對(duì)數(shù)據(jù)庫(kù)性能會(huì)有怎么樣的影響呢?此時(shí)顯然數(shù)據(jù)非常具有選擇性,但是并不一定索引能夠起到很好的效果。這還要看其具體存儲(chǔ)的位置。如果這十條記錄在硬盤(pán)中存儲(chǔ)的物理位置比較近,如可能在同一個(gè)扇區(qū)之內(nèi),則此時(shí)索引對(duì)于數(shù)據(jù)庫(kù)性能的影響就會(huì)比較大,能夠在最短時(shí)間內(nèi)找到符合條件的數(shù)據(jù)。但是如果相關(guān)的行在表中存儲(chǔ)的位置并不互相靠近,則這個(gè)索引的效果就會(huì)逐漸減少。因?yàn)槿绻ヅ渌饕档臄?shù)據(jù)分散在硬盤(pán)上的多個(gè)酷愛(ài)時(shí),則必須從表中選擇多個(gè)單獨(dú)的塊以滿足查詢。

    數(shù)據(jù)庫(kù)管理員對(duì)于這一點(diǎn)要特別注意。因?yàn)榇藭r(shí)如果數(shù)據(jù)庫(kù)管理員查用了索引的話,那么很可能是畫(huà)蛇添足。筆者建議,當(dāng)數(shù)據(jù)庫(kù)管理員發(fā)現(xiàn)數(shù)據(jù)分散在表的多個(gè)塊的時(shí)候,最好是不要使用索引,而是執(zhí)行全表掃描。此時(shí)執(zhí)行掃描反而會(huì)比執(zhí)行索引的效率更高。因?yàn)樵趫?zhí)行全表掃描的時(shí)候,Oracle數(shù)據(jù)庫(kù)系統(tǒng)會(huì)使用多塊讀取以加速掃描表。而如果采用索引的話,則其讀取數(shù)據(jù)時(shí)是單塊讀取的。而由于數(shù)據(jù)存儲(chǔ)在多個(gè)塊中,所以其讀取的速度反而會(huì)更慢。

    由此可見(jiàn),Oracle數(shù)據(jù)庫(kù)管理員在數(shù)據(jù)庫(kù)設(shè)計(jì)與日常維護(hù)中,也要想辦法能夠讓數(shù)據(jù)盡量存儲(chǔ)在臨近的位置。如盡量減少在同一個(gè)服務(wù)器中不要部署不同的應(yīng)用服務(wù),防止硬盤(pán)產(chǎn)生過(guò)多的磁盤(pán)碎片;如需要采用多塊硬盤(pán)的話,則最好通過(guò)表空間把類似的表放在同一個(gè)表空間中,從而讓相關(guān)的行在表zhognd存儲(chǔ)位置盡量靠近,以提高索引的使用效果。也就是說(shuō),數(shù)據(jù)庫(kù)管理員在使用索引的時(shí)候,為表中的字段建立了索引這只是其工作的第一步。在后續(xù)數(shù)據(jù)庫(kù)維護(hù)與調(diào)整的過(guò)程中,仍然要注意數(shù)據(jù)存儲(chǔ)位置對(duì)索引的影響。
通常情況下,索引可以提高數(shù)據(jù)庫(kù)的性能。如通過(guò)索引,則Select、Update、、Delete語(yǔ)句的Where子句的性能可以從索引中獲得收益。但是這并不是百分之百準(zhǔn)確的。或者說(shuō),只有這些語(yǔ)句涉及到的行比較少的時(shí)候,這個(gè)原則是準(zhǔn)確的。但是如果所涉及到的行比較多,則這個(gè)索引的應(yīng)用反而會(huì)降低數(shù)據(jù)庫(kù)的性能。

    如現(xiàn)在數(shù)據(jù)庫(kù)系統(tǒng)中有一張表,其中包含了300萬(wàn)條記錄。而用戶現(xiàn)在需要利用Delete語(yǔ)句刪除其中100萬(wàn)條記錄。如想要把記錄創(chuàng)建日期為2005年12月31日前的數(shù)據(jù)全部刪除掉。此時(shí)雖然采用了Where子句的限制條件,但是這個(gè)時(shí)候因?yàn)閯h除的數(shù)據(jù)量太多,其并不能夠從索引中獲取什么好處。因?yàn)槔胐elete語(yǔ)句刪除記錄的時(shí)候,同時(shí)需要?jiǎng)h除相關(guān)的索引。當(dāng)Delete語(yǔ)句需要?jiǎng)h除將近表中一半的記錄的時(shí)候,同時(shí)需要?jiǎng)h除跟這個(gè)表相關(guān)的近一半的索引,這個(gè)過(guò)程是非常耗時(shí)的。為此大量行的Delete操作會(huì)因?yàn)楸碇写嬖谒饕档推鋱?zhí)行速度。另外Insert語(yǔ)句也會(huì)有類似的現(xiàn)象。通常情況下,增加索引會(huì)降低Insert語(yǔ)句的執(zhí)行新能。因?yàn)樵趫?zhí)行insert語(yǔ)句的時(shí)候,由于索引的存在,數(shù)據(jù)庫(kù)需要同時(shí)往數(shù)據(jù)表與索引表中插入數(shù)據(jù)。為此,從理論上來(lái)說(shuō),數(shù)據(jù)庫(kù)表中的每個(gè)索引都回使得對(duì)這個(gè)表進(jìn)行Insert操作時(shí)速度減慢兩倍;而在這個(gè)數(shù)據(jù)表上使用兩條索引則會(huì)使得插入速度減慢一倍。

    可見(jiàn)并不是所有語(yǔ)句或者操作都能夠從索引中獲得收益。為此數(shù)據(jù)庫(kù)管理員必須要了解索引跟一些常用命令之間的沖突。只有如此數(shù)據(jù)庫(kù)管理員才能夠在索引給某些操作帶來(lái)的收益與損失之間取得一個(gè)均衡,并根據(jù)相關(guān)的操作來(lái)調(diào)整索引。對(duì)于這一點(diǎn)筆者有如下幾個(gè)建議,大家可以參考一下。

    一是當(dāng)需要網(wǎng)一個(gè)表中插入大量數(shù)據(jù)的時(shí)候,最好能夠先把索引取消,以提高插入的速度。如現(xiàn)在數(shù)據(jù)庫(kù)管理員需要往表Product中添加記錄的話,無(wú)論其采用什么方式,如采用Select into語(yǔ)句,還是采用圖形化的導(dǎo)入工具都好。當(dāng)需要插入的記錄比較多的時(shí)候,最好先把索引禁用掉。此時(shí)數(shù)據(jù)庫(kù)只需要在數(shù)據(jù)表中插入數(shù)據(jù)即可,而不用維護(hù)索引表。等到數(shù)據(jù)導(dǎo)入完成之后,再起用這個(gè)索引。此時(shí)數(shù)據(jù)庫(kù)會(huì)重建這些記錄的索引。這是大部分?jǐn)?shù)據(jù)庫(kù)管理員在數(shù)據(jù)插入的過(guò)程中常用的手段??梢悦黠@提高數(shù)據(jù)庫(kù)的插入性能。

    二是當(dāng)因?yàn)槟承┰蛐枰蹇諗?shù)據(jù)庫(kù)表中的記錄時(shí),如果這張數(shù)據(jù)表中的記錄比較多時(shí),則可以考慮一下先把表中的索引取消掉,然后再執(zhí)行刪除操作。如此的話數(shù)據(jù)庫(kù)系統(tǒng)在刪除數(shù)據(jù)的時(shí)候,就不用同時(shí)維護(hù)數(shù)據(jù)表與索引表了。故可以成倍提高Delete的操作效率。等到刪除操作執(zhí)行完畢后,再啟用索引。

    當(dāng)受影響的記錄比較多時(shí),上面這兩個(gè)建議可以明顯的提高數(shù)據(jù)庫(kù)的執(zhí)行性能。特別是在應(yīng)用系統(tǒng)初始化的過(guò)程中,可能需要導(dǎo)入大量的初始化記錄。有時(shí)候可能發(fā)現(xiàn)數(shù)據(jù)導(dǎo)入有錯(cuò)誤需要整張表清空等等。此時(shí)如果先把索引禁用掉的話,則數(shù)據(jù)庫(kù)管理員會(huì)發(fā)現(xiàn),期初數(shù)據(jù)導(dǎo)入會(huì)變得順利許多。

    數(shù)據(jù)庫(kù)系統(tǒng)強(qiáng)制性的要求。即使不采用這些建議,數(shù)據(jù)庫(kù)最終也可以完成相關(guān)的任務(wù)。只是其速度上可能會(huì)有差異。而且隨著記錄的不同,這個(gè)差異有時(shí)候可能會(huì)相差幾十個(gè)小時(shí)??傊P者認(rèn)為作為一個(gè)優(yōu)秀的數(shù)據(jù)庫(kù)管理員,應(yīng)該了解索引在不同情況下對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的影響。大丈夫能屈能伸。在必要的情況下,數(shù)據(jù)庫(kù)管理員要敢于取消索引,以提高某些操作的性能。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Oracle數(shù)據(jù)庫(kù)優(yōu)化的經(jīng)驗(yàn)總結(jié)
合理創(chuàng)建數(shù)據(jù)庫(kù)索引
如何提高oracle數(shù)據(jù)庫(kù)的性能
第七章 數(shù)據(jù)字典
Oracle數(shù)據(jù)庫(kù)優(yōu)化的方案和實(shí)踐
zhouweifeng | 分區(qū)表PARTITION table(轉(zhuǎn))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服