一、分區表
分區表的幾種分類:
1、Range(範圍)分區
是應用範圍比較廣的表分區方式,它是以列的值的範圍來做為分區的劃分條件,將記錄存放到列值所在的
range分區中。比如按照時間劃分,2012 年1 季度的資料放到a 分區,12年2 季度的資料放到b分區,
因此在建立的時候呢,需要你指定基於的列,以及分區的範圍值,如果某些記錄暫無法預測範圍,
可以建立maxvalue 分區,所有不在指定範圍內的記錄都會被儲存到maxvalue 所在分區中,
並且支援指定多列做為依賴列。
建立RANGE分區案例
需要我們指定的有:
column:分區依賴列(如果是多個,以逗號分隔);
partition:分區名稱;
values less than:後跟分區範圍值(如果依賴列有多個,範圍對應值也應是多個,中間以逗號分隔);
tablespace_clause:分區的儲存屬性,例如所在資料表空間等屬性(可為空白),預設繼承基表所在資料表空間的屬性。
例: Sql代碼 CREATE TABLE RM_CUST_MONTH_RANGE ( YEAR_MONTH NUMBER(6) NOT NULL, ORG_CODE VARCHAR2(8), REGIE_ORG_CODE VARCHAR2(8), CUST_CODE VARCHAR2(12), CUST_NAME VARCHAR2(200), CUST_LICENCE_CODE VARCHAR2(18) ) PARTITION BY RANGE(YEAR_MONTH)( PARTITION YEAR_MONTH_1201 VALUES LESS THAN(201201) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_1202 VALUES LESS THAN(201202) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_1203 VALUES LESS THAN(201203) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_1204 VALUES LESS THAN(201204) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_1205 VALUES LESS THAN(201205) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_1206 VALUES LESS THAN(201206) TABLESPACE RMS_DATA, PARTITION YEAR_MONTH_MAXVALUE VALUES LESS THAN(MAXVALUE) TABLESPACE RMS_DATA);
2、Hash(雜湊)分區
對於那些無法有效劃分範圍的表,可以使用hash 分區。
hash 分區會將表中的資料平均分配到你指定的幾個分區中,列所在分區是依據分區列的hash 值自動分配,
因此你並不能控制也不知道哪條記錄會被放到哪個分區中,hash 分區也可以支援多個依賴列。
建立hash分區案例
column:分區依賴列(支援多個,中間以逗號分隔);
partition:指定分區,有兩種方式:
(1)直接指定分區名,分區所在資料表空間等資訊。
(2)只指定分區數量,和可供使用的資料表空間。
例: Sql代碼 CREATE TABLE RM_CUST_MONTH_HASH ( YEAR_MONTH NUMBER(6) NOT NULL, ORG_CODE VARCHAR2(8), REGIE_ORG_CODE VARCHAR2(8), CUST_CODE VARCHAR2(12), CUST_NAME VARCHAR2(200), CUST_LICENCE_CODE VARCHAR2(18) ) PARTITION BY HASH (YEAR_MONTH)( PARTITION T_HASH_P1 TABLESPACE RMS_DATA, PARTITION T_HASH_P2 TABLESPACE RMS_DATA, PARTITION T_HASH_P3 TABLESPACE RMS_DATA);
或者: Sql代碼 CREATE TABLE RM_CUST_MONTH_HASH_2 ( YEAR_MONTH NUMBER(6) NOT NULL, ORG_CODE VARCHAR2(8), REGIE_ORG_CODE VARCHAR2(8), CUST_CODE VARCHAR2(12), CUST_NAME VARCHAR2(200), CUST_LICENCE_CODE VARCHAR2(18) ) PARTITION BY HASH (YEAR_MONTH) PARTITIONS 3 STORE IN(RMS_DATA,RMS_DATA,RMS_DATA);
3、List(列表)分區
List分區與range 分區和hash 分區都有類似之處,
該分區與range分區類似的是也需要你指定列的值,但這又不同與range分區的範圍式列值,其分區值
必須明確指定。也不同與hash分區,通過明確指定分區值,你能控制記錄儲存在哪個分區。
它的分區列只能有一個,而不能像range 或者hash 分區那樣同時指定多個列做為分區依賴列。
它的單個分區對應值可以是多個,你在分區時必須確定分區列可能存在的值,一旦插入的列值不在分區範圍內,則插入/更新就會失敗,因此通常建議使用list分區時,要建立一個default分區儲存那些不在指定範圍內的
記錄,類似range 分區中的maxvalue分區。
--建立list分區案例
需要我們指定的有:
column:分區依賴列,注意:只能是一個;
partition:分區名稱;
literal:分區對應值,注意:每個分區可以對應多個值;
tablespace_clause:分區的儲存屬性,例如所在資料表空間等屬性(可為空白),預設繼承基表所在資料表空間的屬性。
例: Sql代碼 CREATE TABLE RM_CUST_MONTH_LIST ( YEAR_MONTH NUMBER(6) NOT NULL, ORG_CODE VARCHAR2(8), REGIE_ORG_CODE VARCHAR2(8), CUST_CODE VARCHAR2(12), CUST_NAME VARCHAR2(200), CUST_LICENCE_CODE VARCHAR2(18) ) PARTITION BY LIST (YEAR_MONTH)( PARTITION T_LIST_P1 VALUES (201201,201202,201203) TABLESPACE RMS_DATA, PARTITION T_LIST_P2 VALUES (201204,201205,201206) TABLESPACE RMS_DATA, PARTITION T_LIST_P3 VALUES (201207,201208,201209) TABLESPACE RMS_DATA, PARTITION T_LIST_PD VALUES (DEFAULT) TABLESPACE RMS_DATA);
4、組合分區:Range-Hash,Range-List
如果某表按照某列分區之後,仍然較大,或者是一些其它的需求,還可以通過分區內再建子分區的方式將分區再分區,即組合分區的方式。要注意順序,根分區只能是range 分區,子分區可以是hash 分區或list 分區。
(1)建立range-hash組合分區
需要我們指定的有:
column_list:分區依賴列(支援多個,中間以逗號分隔);
subpartition:子分區方式,有兩處:
Subpartition_by_list:文法與list 分區完全相同,只不過把關鍵字partition 換成subpartition
Subpartition_by_hash:文法與hash 分區完全相同,只不過把關鍵字partition 換成subpartition
partition:分區名稱;
range_partition_values_clause:與range 分區範圍值的文法;
tablespace_clause:分區的儲存屬性,例如所在資料表空間等屬性(可為空白),預設繼承基表所在資料表空間的屬性。
例: Sql代碼 CREATE TABLE RM_CUST_MONTH_RANGE_HASH( YEAR_MONTH NUMBER(6) NOT NULL, ORG_CODE VARCHAR2(8), REGIE_ORG_CODE VARCHAR2(8),