Oracle表分区的创建和分类(2)

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编程”之类,下载见  。没事看看总归有收获。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/20d87a43c7e876524d3ee9a769d6f396.html