Oracle邏輯結(jié)構(gòu)優(yōu)化的解剖
Oracle邏輯結(jié)構(gòu)優(yōu)化其實(shí)就是通過(guò)增加、減少或者調(diào)整邏輯相關(guān)結(jié)構(gòu),來(lái)提高其應(yīng)用的效率,以下就是通過(guò)對(duì)其基本表的設(shè)計(jì)以及索引、聚簇的討論來(lái)分析Oracle邏輯結(jié)構(gòu)的優(yōu)化。以下就是文章的主要內(nèi)容的介紹。
基本表擴(kuò)展
數(shù)據(jù)庫(kù)性能包括存儲(chǔ)空間需求量的大小和查詢響應(yīng)時(shí)間的長(zhǎng)短兩個(gè)方面。為了優(yōu)化數(shù)據(jù)庫(kù)性能,需要對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行規(guī)范化。一般來(lái)說(shuō),邏輯數(shù)據(jù)庫(kù) 設(shè)計(jì)滿足第三范式的表結(jié)構(gòu)容易維護(hù)且基本滿足實(shí)際應(yīng)用的要求。
所以,實(shí)際應(yīng)用中一般都按照第三范式的標(biāo)準(zhǔn)進(jìn)行規(guī)范化,從而保證了Oracle邏輯結(jié)構(gòu)數(shù)據(jù)庫(kù)的一致性和完整性, 設(shè)計(jì)人員往往會(huì)設(shè)計(jì)過(guò)多的表間關(guān)聯(lián),以盡可能地降低數(shù)據(jù)冗余。但在實(shí)際應(yīng)用中這種做法有時(shí)不利于系統(tǒng)運(yùn)行性能的優(yōu)化:如過(guò)程從多表獲取數(shù)據(jù)時(shí)引發(fā)大量的連接操作,在需要部分?jǐn)?shù)據(jù)時(shí)要掃描整個(gè)表等,這都消耗了磁盤(pán)的I/O 和CPU 時(shí)間。
為解決這一問(wèn)題,在設(shè)計(jì)表時(shí)應(yīng)同時(shí)考慮對(duì)某些表進(jìn)行反規(guī)范化,方法有以下幾種:一是分割表。分割表可分為水平分割表和垂直分割表兩種:水平分割是按照行將一個(gè)表分割為多個(gè)表,這可以提高每個(gè)表的查詢速度,但查詢、更新時(shí)要選擇不同的表,統(tǒng)計(jì)時(shí)要匯總多個(gè)表,因此應(yīng)用程序會(huì)更復(fù)雜。
垂直分割是對(duì)于 一個(gè)列很多的表,若某些列的訪問(wèn)頻率遠(yuǎn)遠(yuǎn)高于其它列,就可以將主鍵和這些列作為一個(gè)表,將主鍵和其它列作為另外一個(gè)表。通過(guò)減少列的寬度,增加了每個(gè)數(shù)據(jù)頁(yè)的行數(shù),一次I/O就可以掃描更多的行(同理于內(nèi)存的頁(yè)式訪問(wèn)),從而提高了訪問(wèn)每一個(gè)表的速度。
但是由于造成了多表連接,所以應(yīng)該在同時(shí)查詢或更新不同分割表中的列的情況比較 少的情況下使用。二是保留冗余列。當(dāng)兩個(gè)或多個(gè)表在查詢中經(jīng)常需要連接時(shí),可以在其中一個(gè)表上增加若干冗余的列,以避免表之間的連接過(guò)于頻繁,一般在冗余列的數(shù)據(jù)不經(jīng)常變動(dòng)的情況下使用。
三是增加派生列。派生列是由表中的其它多個(gè)列的計(jì)算所得,增加派生列可以減少統(tǒng)計(jì)運(yùn)算,在數(shù)據(jù)匯總時(shí)可以大大縮短運(yùn)算時(shí)間(通過(guò)周期性結(jié)轉(zhuǎn)豈不是更好?)。
因此,在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,數(shù)據(jù)應(yīng)當(dāng)按兩種類別進(jìn)行組織:頻繁訪問(wèn)的數(shù)據(jù)和頻繁修改的數(shù)據(jù)。對(duì)于頻繁訪問(wèn)但是不頻繁修改的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理不規(guī)范化。對(duì)于頻繁修改但并不頻繁訪問(wèn)的數(shù)據(jù),內(nèi)部設(shè)計(jì)應(yīng)當(dāng)物理規(guī)范化。
有時(shí)還需將規(guī)范化的表作為Oracle邏輯結(jié)構(gòu)數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ),然后再根據(jù)整個(gè)應(yīng)用系統(tǒng)的需要, 物理地非規(guī)范化數(shù)據(jù)。規(guī)范與反規(guī)范都是建立在實(shí)際的操作基礎(chǔ)之上的約束,脫離了實(shí)際兩者都沒(méi)有意義。只有把兩者合理地結(jié)合在一起,才能相互補(bǔ)充,發(fā)揮各自的優(yōu)點(diǎn)。
文章出自:http://www.programbbs.com/doc/3414.htm
【編輯推薦】



















