- 相關(guān)推薦
ORACLE數(shù)據(jù)表管理建議
ORACLE數(shù)據(jù)庫中,表是最基本的內(nèi)容?梢哉f,表設計的好壞直接跟數(shù)據(jù)庫的性能相關(guān)。所以,在設計表的時候,除了要遵循其固有的數(shù)據(jù)庫準則之外,還需要看個人的數(shù)據(jù)庫管理經(jīng)驗。
一、 表該存放在哪里?
我們都知道,在ORACLE數(shù)據(jù)庫中,使利用空間這個概念來管理表對象的。在數(shù)據(jù)庫創(chuàng)建的時候,數(shù)據(jù)庫中已經(jīng)建立了一些表空間。那么當我們新建立表的時候,這個新表的位置該放在什么地方呢?這就好像吃飯時的坐的位置一樣,是有講究的。一般來說,我們在新建表的時候,至少要遵循如下建議:
一是在數(shù)據(jù)庫創(chuàng)建的時候,在數(shù)據(jù)庫中已經(jīng)有了一個SYSTEM的表空間。一般情況下,這個表空間中,只包含數(shù)據(jù)字典及Oracle系統(tǒng)對象。如果我們將我們的表建立在這個空間上的話,那是要降低數(shù)據(jù)庫的性能的。所以,一般我們是不建議用戶把表格建立在這個空間上。但是,若我們不只一個人維護數(shù)據(jù)庫,如有八個人共同設計數(shù)據(jù)庫系統(tǒng)時,如何才能保證其他用戶不在SYSTEM表空間中建立數(shù)據(jù)庫表格呢?最好的辦法就是通過權(quán)限控制。如我們可以給每個數(shù)據(jù)庫設計人員指定一個默認的表空間,讓他們只能在這個表空間中建立表格。如此的話,就能防止他們在SYSTEM表空間中建立自己的數(shù)據(jù)表格,從而對數(shù)據(jù)庫的運行性能產(chǎn)生不良影響。所以,若給每個用戶設置默認表空間的話,那么用戶在建立具體的表時,不用具體指定表空間了。
二是我們在為某個應用設計數(shù)據(jù)庫的時候,最好先對表的空間進行規(guī)劃。一般情況下,不要把數(shù)據(jù)表隨意的分散到不同的表空間中去。如我們在為一個ERP系統(tǒng)設計數(shù)據(jù)庫的時候,若把采購部門相關(guān)的表跟銷售部門相關(guān)的表放到兩個不同的表空間中去,這是不明智的做法。這么處理的話,會降低某些數(shù)據(jù)庫管理和維護操作的效率,如數(shù)據(jù)的備份與恢復操作;而且,也無法集中管理屬于某個特定應用的數(shù)據(jù)。所以,我們一般建議,在規(guī)劃數(shù)據(jù)庫表空間的時候,把相同應用的表放在同一個表空間中去。如果要區(qū)分不同部門或者不同模塊的表的話,我們可以在表的命名上動腦子。如我們在設計ERP系統(tǒng)的數(shù)據(jù)庫中,可以根據(jù)其應用模塊的不同,在前面加上前綴來進行識別。如跟系統(tǒng)基本配置相關(guān)的表,我們可以用AD為前綴;而跟銷售部門相關(guān)的表,我們可以加上SA前綴等等。如此的話,這些表具體是屬于哪個模塊的,就一清二楚了。完全沒有必要為此設置不同的表空間。這是ORACLE數(shù)據(jù)庫初學者經(jīng)常會犯的錯誤。主要是對ORACLE表空間的定義不是很熟悉所導致的。
二、 對預計存儲數(shù)量比較大的表時,要給與額外的重視。
有些表非常的大。我們這邊說的大,不一定是說結(jié)構(gòu)復雜,而是指在這個表格中,預期會存儲比較多的數(shù)據(jù)。為了提高對這個表格的處理效率,我們在事先要做出一定的安排。否則的話,后續(xù)對這些大表進行查詢、插入等操作的話,速度會很慢。所以,我們就有必要在數(shù)據(jù)庫設計的時候,先預先估計一下表的數(shù)據(jù)存儲量,把一些數(shù)據(jù)量大的表格,做一些額外的設置。如在ERP軟件的數(shù)據(jù)庫設置中,一般來說,產(chǎn)品數(shù)據(jù)與物料清單數(shù)據(jù)這兩個表的數(shù)據(jù)量會比較大;而從長遠看的話,銷售訂單、采購訂單、生產(chǎn)訂單、記賬憑證等這種單據(jù)類相關(guān)的表格其數(shù)據(jù)量也會比較大。一年兩年可能感覺不出來,但是,到十年后,這個紀錄數(shù)量就會很龐大。而像ERP系統(tǒng)這種大型的信息化管理項目,用個幾十年時很正常的事情。而且,為了記錄的完整性,也不建議用戶把以前的數(shù)據(jù)刪除。所以,為這種應用進行數(shù)據(jù)庫設計的時候,要充分考慮這些大表的性能問題。
具體的來說,設計大表的時候,可以考慮遵循如下的建議。
一是不要為大表設置存儲的限制。在ORACLE數(shù)據(jù)庫中,可以為每張表格設置存儲配額限制。如此的話,表最大容量就不能超過這個限制。對于一些數(shù)據(jù)容量比較小的表格,這么設置時合理的,可以提高空間的利用率。但是,若數(shù)據(jù)量比較大的話,就不建議事先設置表的存儲空間了。如ERP系統(tǒng)的銷售訂單表,其剛開始可能記錄量很小,第一年預計只有1G的記錄容量,但是,估計在十年后,這個記錄容量就會達到10G了。在這種情況下,我們怎么來給其設置存儲空間呢?一開就設置10G空間,這也是不合理的。而且,設置存儲空間,就意味著有可能產(chǎn)生存儲碎片,從而影響到數(shù)據(jù)查詢的效率。所以,在數(shù)據(jù)庫表的設計過程中,若某些應用的表可能會有比較大的數(shù)據(jù)容量時,建議不要對其存儲空間做出任何的限制。
二是要為這大表分配足夠的臨時空間。如我們使用ERP系統(tǒng)時,要查詢產(chǎn)品資料信息。我們都知道,產(chǎn)品信息的話,有些企業(yè)這個紀錄數(shù)非常的龐大。而且在查詢時,我們還會經(jīng)常的進行排序操作。如有時候會按照產(chǎn)品編碼對查詢出來的數(shù)據(jù)進行排序。當記錄少的話,還好;但是,當記錄多的話,這個排序動作,要求具有比較大的臨時存儲空間。所以,當某個表預計會有很大的記錄數(shù)量的時候,我們就要給其分配足夠多的臨時空間。臨時空間的存儲參數(shù)設置取決于臨時表空間的默認儲存參數(shù)設置。我們可以更改這些參數(shù),以達到我們對要求。若沒有給大表分配足夠多的臨時空間的話,則排序的動作將會很慢,而且很可能不成功。
三是要考慮將表與表的索引分離存放。大表所對應的索引通常也比較大。一般來說,索引的數(shù)量是隨著表記錄的數(shù)量增加而增加,兩者是接近于一個正比例的關(guān)系。所以,通常表的記錄容量大的時候,索引數(shù)量也會很龐大。針對這種情況,我們考慮突破我們上面講的表空間的規(guī)則定義。而考慮把表和他的索引分別存儲于不同的表空間中,甚至在條件允許的情況下,分別存儲于不同的硬盤中。這么做的好處是什么呢?最大的好處是讓索引比較容易的獲得所需要的連續(xù)的存儲空間,從而提高輸入輸入的效率。通俗的說,就是可以提高數(shù)據(jù)的查詢效率。如不這么處理的話,查詢大容量的記錄的話,數(shù)據(jù)庫可能需要花費30秒;而如此設計的話,就可能把時間縮短為10秒。這是一個很明顯的性能改善。
三、 如何給表命名?
上面我在講如何為表分配存儲空間的時候,已經(jīng)講到過這方面的問題。下面,我就將對這個問題進行詳細的描述,以幫助數(shù)據(jù)庫管理員掌握一套好的數(shù)據(jù)庫命名規(guī)則。
首先,毋庸置疑的,在為標命名的時候,要遵循ORACLE數(shù)據(jù)庫的基本命名規(guī)則,如不能以數(shù)字開頭為表命名,如不能利用數(shù)據(jù)庫的關(guān)鍵字為表命名,如表的名字不能重復等等。這些是最基本的要求,就不用我多費口舌了。除了要遵循這些基本的命名規(guī)則外,在實際工作中,為了數(shù)據(jù)庫后續(xù)的維護等方面出發(fā),我們還是要遵循一些額外的規(guī)則。這些規(guī)則跟ORACLE定義的規(guī)則不同。我們所講的規(guī)則沒有約束力,可以說,只是業(yè)界的一些共識而已。你若不怎么處理,ORACLE數(shù)據(jù)庫也不會說你錯誤,只是后續(xù)維護的時候,會比較麻煩而已。
一是在對數(shù)據(jù)庫命名的時候,最好能跟體現(xiàn)表的分類關(guān)系。如最常見的,我們在設計數(shù)據(jù)庫的時候,表都是按系統(tǒng)的具體模塊來區(qū)分的,如根據(jù)前端系統(tǒng)要求的不同,數(shù)據(jù)庫的表大致可以分為系統(tǒng)基本配置表、銷售模塊表、采購模塊表、報表模塊表等等。我們可以根據(jù)這些模塊的不同,分別給與不同的前綴來區(qū)分。這么做的好處是很明顯的。如一看到表最大名字,就可以知道這個表是屬于哪個應用的、哪個模塊的,這無疑可以提高數(shù)據(jù)庫設計與前臺軟件開發(fā)的效率。同時,數(shù)據(jù)庫中默認的排序規(guī)則是按名字來排序的,所以,為表格設置類別前綴的話,可以把同一類的表格排在一起,方便我們察看。
二是對表格命名的時候,要考慮可讀性,而不能隨便阿狗阿貓的亂取名字。最常見的是,那些剛學數(shù)據(jù)庫的人,在表命名的時候,如要建幾張測試表,就會隨便命名如TEST1,TEST2之類的。雖然這只是測試,但是,也不符合我們的命名過則。要做測試的話,那就以TEST開頭,然后后面加上具體要測試的內(nèi)容。如此的話,我們才可以通過表的名字知道該表具體的用途。而不用打開表去看里面具體的結(jié)構(gòu)或者注釋才能知道我們需要的信息。所以,在設計表的名字的時候,還要關(guān)注一下其的可讀性。
【ORACLE數(shù)據(jù)表管理建議】相關(guān)文章:
Oracle重做日志文件管理技巧08-31
Oracle認證:ORACLE綁定變量BINDPEEKING08-25
Oracle數(shù)據(jù)庫臨時表管理技巧06-15
Oracle認證:空間管理三個技巧05-13
Oracle認證:Oracle內(nèi)存結(jié)構(gòu)研究-PGA篇09-22
Oracle發(fā)展歷程09-12
Oracle最新認證07-13
Oracle認證作用07-31