Oracle數據庫段管理有技巧(二)
之前已經為大家介紹了兩點Oracle數據庫段管理有技巧,即Oracle數據庫段管理有技巧(一),接下來就為大家介紹更多的技巧。
技巧三:減少臨時段的使用
臨時段主要用來存儲排序等操作所產生的臨時數據。如現在某張數據表中,有A、C、B、F、E、D等記錄。此時,若用Order By子句對其進行排序,數據庫系統就會返回A、B、C、D、E、F數據。這些被重新排序過的數據,就叫做臨時數據。通常情況下,這些臨時數據會存放在兩個地方,分別為PGA工作區與臨時段中。默認情況下,這些臨時數據會先存儲在PAG工作區。如果因為臨時數據比較大,PGA工作區已經滿了的情況下,數據庫會把剩下的臨時數據存放到臨時段中。
從理論上講,無論是把數據存放在PGA工作區還是存儲在臨時段中,對于用戶的最終結果沒有影響。但是,如果從數據庫性能方面考慮,則兩者就有比較大的差異。
PGA工作區,又叫做程序全局區域,它是包含服務器進程的數據和控制信息的非共享內存區域。通常情況下,只要數據庫服務器進程啟動,則Oracle就會在內存中創建程序全局區域。在10G以后的版本中,Oracle數據庫能夠自動根據內存的使用情況來管理程序全局區域,而不用數據庫管理員去手工的干預,從而使得PGA工作區的使用率更高。所以,一般來說,把臨時數據存放在PGA工作區,其效率更高。
在實際工作中,數據庫管理員應該盡量避免產生大量的臨時數據,或者說,盡量不讓臨時數據超過PGA工作區所能夠承受的***容量。從而數據庫不得不把臨時數據存放到臨時段中。
在實際工作中,很多Select語句都會產生臨時數據。如在Select語句中,若加入Order By、Group By等子句,都會導致數據庫對數據文件中的記錄進行重新組織,從而產生大量的臨時數據。為此,在應用程序設計中,就***能夠加入一些默認的查詢限制條件,從而避免產生大量的臨時數據。如在銷售表查詢的時候,如果用戶沒有輸入具體的查詢條件,則應用程序默認只查詢近30天的銷售記錄,并按交易的日期或者產品進行排序。如果這些記錄不能夠滿足用戶的需求,再進行全部記錄的查詢。如此設計的話,就可以在一定程度上減少臨時數據,減少臨時段使用的頻率。因為根據相關統計,用戶在查詢的時候,往往不會主動加入查詢條件。而他們所需要的數據,往往都是最近一些的交易記錄。為此,在應用程序設計過程中,加入一些默認的查詢條件是非常有必要的。
技巧四:LOB段***獨立與普通表
在Oracle數據庫中,除了可以存放一些字符、數字等基本數據類型外,還可以存儲附件、圖像、音頻、視頻文件等等。用來存放這些數據的段,就叫做LOB段。當數據庫在創建這些特殊類型的列時,Oracle數據庫系統就會自動為他們建立對應的LOB段。通常情況下,如果這些特殊數據類型的長度比4000字節要少,則這一列與其他普通列的數據會一起存放在表段中,如果數據長度超過了4000字節,則數據庫就會被存放在LOB段中。
如果從數據庫性能方面考慮,***能夠把這些特殊的數據類型跟其他數據類型分別存放。如現在有一張產品信息表,需要包含產品ID、產品名稱、產品規格、產品圖像等內容。那么,在數據庫設計的時候,***能夠建立兩張表,一張用來存儲產品ID、產品名稱、產品規格等信息;另一張表中存儲產品ID、產品圖像等信息。如此設計,主要是出于兩個方面的考慮。
一是在實際工作中,并不是每次查看產品信息時,都需要產品圖像的內容。如在生成訂單時,沒有必要再每次下單時都顯示產品圖片。因為對于一些老產品來說,這個產品圖像早就印在用戶腦海中。即使系統顯示圖片信息,用戶也不會去關注。
二是這會影響數據庫的查詢性能。眾所周知,數據庫查詢效率跟數據容量有很大的關系。數據容量越大,其查詢的效率越低。而LOB段中存儲的數據往往都是一些大容量的數據。所以在用戶不需要的情況下,顯示圖像等信息,就會大大降低數據庫的性能。再說,在一些應用程序中,由于網速或者刷新率等原因,其顯示圖像信息本身就要比顯示文字信息來的慢。這就更加延長了用戶的等待時間。
所以,LOB段的數據類型***能夠跟表中的其他字段分開來管理。在數據庫設計的時候,就可以把他們存放在獨立的表中,然后通過關鍵字進行關聯。
掌握了這些技巧就會給我們以后的工作帶來很大的方便,而且快速,提高了工作效率,但是這些技巧要靈活掌握,不要生搬硬套。
【編輯推薦】