新聞中心
導(dǎo)讀:在數(shù)據(jù)庫(kù)中,索引與表一樣,不僅需要在數(shù)據(jù)字典中保存索引的定義,還需要在表空間中為他分配實(shí)際的存儲(chǔ)空間,并為其設(shè)置存儲(chǔ)參數(shù)。數(shù)據(jù)庫(kù)管理員若能夠給索引分配合理的表空間,并且設(shè)置合適的參數(shù)的話,則可以在一定程度上提高數(shù)據(jù)庫(kù)的運(yùn)行效率。

成都網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序、集團(tuán)成都企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。核心團(tuán)隊(duì)均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗(yàn),服務(wù)眾多知名企業(yè)客戶(hù);涵蓋的客戶(hù)類(lèi)型包括:搬家公司等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗(yàn),同時(shí)也獲得了客戶(hù)的一致贊譽(yù)!
雖然說(shuō),在建立索引的過(guò)程中,不為其指定具體的存儲(chǔ)參數(shù)也是可行的。索引會(huì)自動(dòng)繼承所處表空間的默認(rèn)存儲(chǔ)參數(shù)。不過(guò),在數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中,筆者是不建議這么做。因?yàn)檫@不能夠發(fā)揮Oracle數(shù)據(jù)庫(kù)高性能的優(yōu)勢(shì)。特別是在一些比較復(fù)雜的數(shù)據(jù)庫(kù)設(shè)計(jì)中,一定要根據(jù)實(shí)際情況,合理的索引存儲(chǔ)進(jìn)行配置,以達(dá)到數(shù)據(jù)庫(kù)性能優(yōu)化的目的。
具體的說(shuō),數(shù)據(jù)庫(kù)管理員可以從如下幾個(gè)方面入手,做好索引的存儲(chǔ)管理。
第一步:為索引指定存儲(chǔ)的表空間。
當(dāng)數(shù)據(jù)庫(kù)管理員為表或者字段建立索引的時(shí)候,可以選擇是否指定具體的表空間。若沒(méi)有具體指定的話,則數(shù)據(jù)庫(kù)會(huì)自動(dòng)在用戶(hù)的默認(rèn)表空間創(chuàng)建索引段。這里初學(xué)者要注意,索引的存儲(chǔ)默認(rèn)表空間不是跟著其所對(duì)應(yīng)的數(shù)據(jù)庫(kù)對(duì)象走,而是跟著用戶(hù)走。也就是說(shuō),現(xiàn)在有一張員工信息表,要為其建立一個(gè)索引。并不是說(shuō)這張員工信息表屬于哪個(gè)表空間,這對(duì)應(yīng)的索引默認(rèn)也是哪個(gè)表空間。而這個(gè)索引的默認(rèn)表空間是建立這個(gè)索引的用戶(hù)的默認(rèn)表空間。
索引是對(duì)表中字段進(jìn)行排序的一種手段。在數(shù)據(jù)庫(kù)管理員創(chuàng)建索引的時(shí)候,Oracle首先對(duì)建立索引的字段進(jìn)行排序,然后將排序后的字段值和相應(yīng)記錄的Rowid存儲(chǔ)在索引段中。而這個(gè)數(shù)據(jù)存儲(chǔ),就需要用到一定的存儲(chǔ)空間,即我們所為的表空間。若一張表中發(fā)索引比較復(fù)雜,則其索引本身的空間可能比表中數(shù)據(jù)所占用的空間還要大。可見(jiàn),對(duì)于索引的表空間進(jìn)行管理的必要性。
在索引的建立過(guò)程中,對(duì)于其所存儲(chǔ)的表空間沒(méi)有特殊的限制。如不需要像其他數(shù)據(jù)庫(kù)一樣,要求把索引與表建立在同一個(gè)表空間或者磁盤(pán)上。數(shù)據(jù)庫(kù)管理員可以根據(jù)企業(yè)自身的需求,合理的為索引分配存儲(chǔ)空間。
不過(guò),筆者認(rèn)為,最好能夠把表與索引保存在不同的表空間中。因?yàn)镺racle數(shù)據(jù)庫(kù)能夠并行讀取不同磁盤(pán)中的數(shù)據(jù),從而達(dá)減少輸入輸入沖突的目的。而現(xiàn)在把索引與其對(duì)應(yīng)的表存放在不同硬盤(pán)上的不同表空間中,就可以提高查詢(xún)的效率。往往在數(shù)據(jù)庫(kù)性能優(yōu)化中,調(diào)整索引與基礎(chǔ)表的表空間位置,這也是我們數(shù)據(jù)庫(kù)管理員常用的手段之一。故,筆者建議,最好能夠?yàn)樗饕⒁粋€(gè)獨(dú)立的表空間,跟其對(duì)應(yīng)的表分開(kāi)存放。若數(shù)據(jù)庫(kù)服務(wù)器有多個(gè)磁盤(pán)的話,可以考慮分別存放在不同的磁盤(pán)上。
另外,若把索引跟對(duì)應(yīng)的表存儲(chǔ)在不同的表空間中的話,在數(shù)據(jù)庫(kù)備份的時(shí)候,要稍加注意。因?yàn)镺racle數(shù)據(jù)庫(kù)允許數(shù)據(jù)庫(kù)管理員以表空間為單位,對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份與還原。此時(shí),若把它們存儲(chǔ)在不同的表空間的話,則對(duì)數(shù)據(jù)表所在的表空間進(jìn)行備份的時(shí)候,就不會(huì)備份索引信息。在還原的時(shí)候,也不會(huì)自動(dòng)把表空間對(duì)應(yīng)的索引進(jìn)行還原。所以,若把索引與表存放在同一個(gè)表空間中,則對(duì)于數(shù)據(jù)庫(kù)備份來(lái)說(shuō),要方便一點(diǎn)。但是,這畢竟是次要的。比起數(shù)據(jù)庫(kù)的性能來(lái)說(shuō),這點(diǎn)困難還是可以克服的。
第二步:為提高更新性能合理配置空閑空間管理方式。
索引不僅跟數(shù)據(jù)庫(kù)的查詢(xún)效率息息相關(guān),而且,還跟數(shù)據(jù)庫(kù)的更新有重要的影響。因?yàn)橐獙?duì)數(shù)據(jù)進(jìn)行更新,往往伴隨著對(duì)數(shù)據(jù)進(jìn)行查詢(xún)。所以,合理設(shè)置索引空閑空間的處理方式,可以有效的提高數(shù)據(jù)庫(kù)的更新性能。
數(shù)據(jù)庫(kù)創(chuàng)建索引的時(shí)候,主要是通過(guò)Pctfree參數(shù)來(lái)指定為更新操作而預(yù)留的空閑空間百分比。如果數(shù)據(jù)庫(kù)管理員把這個(gè)參數(shù)設(shè)置為80%。就表示數(shù)據(jù)塊中的數(shù)據(jù)所占用的空間少于總空閑空間的80% 時(shí),可以直接利用這個(gè)空閑空間來(lái)存儲(chǔ)需要更新的數(shù)據(jù)。當(dāng)現(xiàn)有數(shù)據(jù)塊的數(shù)據(jù)超過(guò)了這個(gè)比例后,則發(fā)生更新動(dòng)作時(shí),就需要為其分配新的數(shù)據(jù)塊了。
可見(jiàn),當(dāng)頻繁的為更新作業(yè)分配數(shù)據(jù)塊的時(shí)候,會(huì)極大的影響數(shù)據(jù)更新的效率;同時(shí),因?yàn)樵黾有碌臄?shù)據(jù)塊,還會(huì)耗用服務(wù)器的硬件資源,如內(nèi)存等等。這無(wú)疑會(huì)影響除了更新作業(yè)之外的其他作業(yè),會(huì)對(duì)整個(gè)數(shù)據(jù)庫(kù)的運(yùn)行性能產(chǎn)生不利的影響。
所以,在創(chuàng)建索引的時(shí)候,數(shù)據(jù)庫(kù)管理員要合理的配置這個(gè)參數(shù)。具體什么參數(shù)是合適的,沒(méi)有一個(gè)嚴(yán)格的標(biāo)準(zhǔn)。這主要是根據(jù)索引對(duì)應(yīng)的表,是否需要進(jìn)行頻繁的更新來(lái)決定的。當(dāng)這個(gè)索引所對(duì)應(yīng)的表,可能要進(jìn)行頻繁的變更,則最好能夠?yàn)槠渲付ū容^大的Pctfree參數(shù),以提高數(shù)據(jù)庫(kù)的更新性能。如對(duì)于ERP系統(tǒng)中的訂單變更表或者價(jià)格信息表,起碼要把這個(gè)參數(shù)指定為80%,或者更高。相反,對(duì)于系統(tǒng)中不怎么進(jìn)行更新的產(chǎn)品基本信息表,則可以把這個(gè)參數(shù)設(shè)置為50%,或者更低。
不過(guò),數(shù)據(jù)庫(kù)管理員需要注意,并不是說(shuō)Pctfree參數(shù)設(shè)置的越大越好。這主要是因?yàn)樘煜聸](méi)有白吃的午餐。Pctfree設(shè)置的比較大,并不是說(shuō)是百利而無(wú)一害的。把Pctfree參數(shù)設(shè)置的偏大,是以犧牲存儲(chǔ)空間未代價(jià)的。所以,對(duì)于一些更新很好的表,在為其建立索引的時(shí)候,沒(méi)有必要為其指定比較大的Pctfree參數(shù)。我們也可以利用Pctused參數(shù)來(lái)進(jìn)行類(lèi)似的設(shè)置。這個(gè)參數(shù)的用途跟Pctfree大同小異,也是對(duì)索引空閑空間管理的一種方式。
另外對(duì)于數(shù)據(jù)庫(kù)表更新來(lái)說(shuō),還有一些索引管理手段,可以提高數(shù)據(jù)庫(kù)的更新性能。
如在企業(yè)導(dǎo)入基礎(chǔ)數(shù)據(jù)的時(shí)候,若某需要在某張表中插入大量數(shù)據(jù),則此時(shí)最好能夠把這張表中的索引先取消掉。因?yàn)楦鶕?jù)索引的工作機(jī)制,每在數(shù)據(jù)庫(kù)表中插入一條記錄的時(shí)候,數(shù)據(jù)庫(kù)都要根據(jù)插入的數(shù)據(jù),更改索引。若插入的記入比較多,而這張表的索引也比較復(fù)雜的話,則數(shù)據(jù)更新的效率就會(huì)比較慢。為了提高數(shù)據(jù)表導(dǎo)入的效率,最好能夠在這個(gè)工作之前先把索引都禁用掉。等到導(dǎo)入完畢后,再重新啟用索引。
第三步:為索引指定區(qū)分配方式。
在索引創(chuàng)建過(guò)程中,雖然可以通過(guò)Storage語(yǔ)句來(lái)指定存儲(chǔ)空間的區(qū)分配方式。但是,筆者覺(jué)得這個(gè)沒(méi)有多大的實(shí)際意義。一方面起指定的參數(shù)比較少,只能夠指定創(chuàng)建索引時(shí)分配的第一個(gè)區(qū)的大小。另一方面,這對(duì)于提高數(shù)據(jù)庫(kù)的性能、索引的管理效率,沒(méi)有多大的效果。
所以,筆者在創(chuàng)建索引的過(guò)程中,基本上是不用Storage語(yǔ)句來(lái)指定其存儲(chǔ)空間的區(qū)分配方式?;蛟S其他數(shù)據(jù)庫(kù)管理員有不同的見(jiàn)解,大家可以討論討論。
總之,筆者認(rèn)為對(duì)索引進(jìn)行優(yōu)化的時(shí)候,主要是涉及到前面兩個(gè)方面。一是要把索引跟其對(duì)應(yīng)的表存儲(chǔ)在不同硬盤(pán)的不同表空間上。二是若索引所對(duì)應(yīng)的表可能涉及到比較頻繁的更新的話,則可以考慮把Pctfree參數(shù)設(shè)置的高一點(diǎn)。
本文名稱(chēng):索引存儲(chǔ)關(guān)系到數(shù)據(jù)庫(kù)的運(yùn)行效率
標(biāo)題URL:http://m.fisionsoft.com.cn/article/ccscsop.html


咨詢(xún)
建站咨詢(xún)
