创建range分区表:
CREATE TABLE t_range
(object_id NUMBER(5),
object_name VARCHAR2(50),
create_date DATE,
OBJECT_TYPE VARCHAR2(20))
PARTITION BY RANGE(object_id)
(
PARTITION object_id_10000 VALUES LESS THAN (10000),
PARTITION object_id_20000 VALUES LESS THAN (20000),
PARTITION object_id_30000 VALUES LESS THAN (30000),
PARTITION object_id_40000 VALUES LESS THAN (40000),
PARTITION object_id_50000 VALUES LESS THAN (50000),
PARTITION object_id_60000 VALUES LESS THAN (60000),
PARTITION object_id_max VALUES LESS THAN (MAXVALUE)
)
插入数据:
INSERTINTO t_range
SELECT object_id,object_name,created,object_type from Dba_Objects;
查看数据:
查看分区信息:
主要应用场景是要对过期数据进行归档整理,只保留一定时期内的数据时都会优先选择范围分区,像电信的话单,一般只保存一年内的数据,更多的历史数据会被转移到另外的库中。
创建list分区表:
CREATE TABLE t_list
(object_id NUMBER(5),
object_name VARCHAR2(50),
create_date DATE,
OBJECT_TYPE VARCHAR2(20))
PARTITION BY LIST(OBJECT_TYPE)
(PARTITION t_list_synonym VALUES('SYNONYM') ,
PARTITION t_list_javaclass VALUES('JAVA CLASS'),
PARTITION t_list_other VALUES(DEFAULT)
)
插入数据:
查看分区信息:
主要应用场景是由于表中的某一列的值具有大量的重复值,比如上边建表中的object_type有2万多条值是synonym 这样分区的好处就是想找值为synonym的记录只需要到相应的分区去查找就行了,常见的业务场景是按行政区等组织数据时可以很方便的把同一地区的数据组织起来。
创建hash分区表:
CREATE TABLE t_hash
(object_id NUMBER(5),
object_name VARCHAR2(50),
create_date DATE,
OBJECT_TYPE VARCHAR2(20))
PARTITION BY HASH(object_id)
PARTITIONS 7 ;
插入数据:
INSERT INTO t_hash
SELECT object_id,object_name,created,object_type fromDba_Objects;
查询数据:
查询分区信息:
Hash分区表的主要应用场景是为了数据均匀分布,当然这样的前提是用来做hash的键是重复性非常小或是基本不重复的,使用的场景我觉得可以在需要平衡io访问的时候,也就是不让一个磁盘或是单个的存储压力过大时。