分區表的作用:
Oracle 的表分區功能可以使某些查詢以及維護操作的性能大大提高
分區表優缺點:
(1)由於將數據分散到各個分區中,減少了數據損壞的可能性;
(2)可以對單獨的分區進行備份和恢復;
(3)可以將分區映射到不同的物理磁盤上,來分散 IO;
(4)提高可管理性、可用性和性能。
(5)缺點:已經存在的表沒有方法可以直接轉化為分區表。不過 Oracle 提供了在 線重定義表的功能。
(6)特殊性:含有 LONG、LONGRAW 數據類型的表不能進行分區,一般分區類型為:varchar,varchar2,number,date
(7)每個表的分區或子分區數的總數不能超過 1023 個。
什么時候用分區表(設計原則):
(1)單表過大,當表的大小超過 2GB,或對於 OLTP 系統,表的記錄超過 1000 萬, 都應考慮對表進行分區。
(2)歷史數據據需要剝離的,表中包含歷史數據,新的數據被增加到新的分區中。
(3)查詢特征非常明顯,比如是按整年、整月或者按某個范圍!
(4)基於表的大部分查詢應用,只訪問表中少量的數據。
(5)按時間段刪除成批的數據,例如按月刪除歷史數據。
(6)按時間周期進行表空間的備份時,將分區與表空間建立對應關系。
(7)如果一個表中大部分數據都是只讀數據,通過對表進行分區,可將只讀數據存儲在只讀表空間中,對於大數據庫的備份是非常有益的。
(8)對於經常執行並行查詢的表應考慮進行分區。
(9)當對表的部分數據可用性要求很高時,應考慮進行表分區。
分區表的類型:
(1)范圍分區(Range Partitioning) 8i+,
以某一個范圍進行分區。eg:時間段划分。
(2)列表分區(List Partitioning) 9i+, 以某一些幾個值進行分區。
eg:地區分區,省份進行划分。
(3)哈希分區(Hash Partitioning),8i+, 根據 hash 值進行的散列分區 ,可以有效的消除 io 的競爭。 更多用在組合分區的子分區中。 不是很均衡,內部的算法,控制不了
(4)復合分區,也就是組合分區,9i 開始,Oracle 就包括了 2 種復合分區,RANGE-HASH 和 RANGE-LIST。
8i+ 在 11g, Oracle 一下就提供了 4 種復合分區: RANGE-RANGE 、 LIST-RANGE、LIST-HASH 和 LIST-LIST 。大分區里面包含小分區
(5)間隔分區(Interval Extension to Range Partitioning (11g) ), 它就是以一個區間分區表為“起點”,並在定義中增加了一個規則(即間隔), 使數據庫知道將來如何增加分區。
eg:比如每個月增加一個分區,從而省去了你不斷的 ADD 或者 SPLIT 新的分區。
(6)參考分區(Referential Partitioning (11g)) 對於主子表關系,如果對主表進行了分區,那么可以在子表上根據外鍵約 束來建立對應主表的分區。
(7)虛擬字段分區(Virtual Column Partitioning (11g)), 虛擬列的值從其他的列推導而來,Oracle 只保存源數據,這個列不占存 儲空間。虛擬列其中一個引申功能就是虛擬列分 區功能。
11g 增加對虛擬列的支持, 這使得分區功能更加靈活。
(8) 系統分區 11g 11g 以前的分區表,需要指定一個或多個分區字段,並根據這個分區字段 的值,按照一定的算法(RANGE、HASH 和 LIST)來決定一條記錄屬於那個分區。
從 11g 開始,Oracle 允許用戶不指定分區列,完全根據程序來控制數據存儲在那個分區中。