CREATE TABLE HASH_TEL
(
COL NUMBER(8),
INF VARCHAR2(100)
)
PARTITION BY HASH (COL)
(
PARTITION PART01 TABLESPACE HASH_TS01,
PARTITION PART02 TABLESPACE HASH_TS02,
PARTITION PART03 TABLESPACE HASH_TS03
);
hash分区最主要的机制是根据hash算法来计算具体某条纪录应该插入到哪个分区中,hash算法中最重要的是hash函数,Oracle中如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
hash分区写入的效率是非常不错的,但是读出来的效率是不乐观的,因此要注意业务场景。
四.复合分区
复合分区是一种分区,嵌入另外一种分区,下面这个例子是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。
CREATE TABLESALES
(
ID INTEGER,
SALES_DATEDATE,
STATUSVARCHAR2(20)
)
PARTITION BYRANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
PARTITION P1 VALUES LESSTHAN(TO_DATE('2012-01-01','YYYY-MM-DD'))
(
SUBPARTITION P1SUB1 VALUES('ACTIVE'),
SUBPARTITION P1SUB2 VALUES('INACTIVE')),
PARTITION P2 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD'))
(
SUBPARTITION P2SUB1 VALUES('ACTIVE'),
SUBPARTITION P2SUB2 VALUES('INACTIVE')
)
)
使用的时候必须谨慎,越复杂的对象,要把握好越难。
一些特殊的使用场景:
1. 利用表分区记录日志,一般日志保留1年,一年以上的日志删除,如果要删除数据并且释放空间,如果不做特殊处理,一般需要停应用;这个时候可以利用表分区,一年创建一个分区,然后把过期的分区删除就可以;
ALTER TABLE SALES TRUNCATE PARTITION P2;
如果一个重要的项目需要使用分区,那么最好阅读一些专业的书籍。比如“精通Oracle10g PL/SQL编程”之类,下载见 。没事看看总归有收获。