现我有一张表数据量很大,需要清理14年5月份前的数据,如何对SYNC_RELATION_NO字段进行hash分区?
CREATE TABLE BIG_TABLE_T
(
SYNC_RELATION_NO NUMBER(10) NOT NULL,
SYNC_ACTION NUMBER(2) NOT NULL,
SYNC_WHERE VARCHAR2(1000 BYTE)
)
------解决思路----------------------
CREATE TABLE BIG_TABLE_T
(
SYNC_RELATION_NO NUMBER(10) NOT NULL,
SYNC_ACTION NUMBER(2) NOT NULL,
SYNC_WHERE VARCHAR2(1000 BYTE)
)
PARTITION BY HASH (SYNC_RELATION_NO)
(
Partition SYNC1,
Partition SYNC2,
Partition SYNC3
);?
------解决思路----------------------
散列分区
允许用户对不具有逻辑范围的数据进行分区
通过在分区键上执行HASH函数决定存储的分区
将数据平均地分布到不同的分区
散列分区语法:
PARTITION BY HASH (column_name)
PARTITIONS number_of_partitions;
或
PARTITION BY HASH (column_name)
( PARTITION part1 [TABLESPACE tbs1],
PARTITION part2 [TABLESPACE tbs2],
...
PARTITION partN [TABLESPACE tbsN]);
------解决思路----------------------
CREATE TABLE BIG_TABLE_T
(
SYNC_RELATION_NO NUMBER(10) NOT NULL,
SYNC_ACTION NUMBER(2) NOT NULL,
SYNC_WHERE VARCHAR2(1000 BYTE),
SYNC_DATE DATA
)
partition by range (SYNC_DATE)
subpartition by hash (SYNC_RELATION_NO)
subpartitions 3 store in (dinya_space07,dinya_space08,dinya_space09)
(partition date1 values less than (to_date('20130501','YYYYMMDD')),
partition date2 values less than (to_date('20140501','YYYYMMDD')),
partition date3 values less than (maxvalue)
);
如果非要HASH分区并且你还要区分时间段的话 可以创建为复合分区 也就是子分区 小弟也是刚学不知道写错没有 大概就是这样
------解决思路----------------------
按照你的说法不适合建hash分区,你要清理14年5月份前的数据,需要建立针对时间的
列表分区或者范围分区比较合适。
hash分区建表语句:
CREATE TABLE BIG_TABLE_T
(
SYNC_RELATION_NO NUMBER(10) NOT NULL,
SYNC_ACTION NUMBER(2) NOT NULL,
SYNC_WHERE VARCHAR2(1000 BYTE)
)
partition by hash(SYNC_RELATION_NO )
partitions 9; (9代表9个分区,你需要分几个分区,就写成几个)