范围分区
范围分区是按照某个列或几个列的值的范围来创建分区,当用户向表中写入数据时,数据库服务器将按照这些列上的值进行判断,将数据写入相应的分区中。
在创建范围分区时,首先要指定分区列,即按照哪些列进行分区,然后为每个分区指定数据范围。范围分区支持 MAXVALUE 范围值的使用,MAXVALUE 相当于一个比任何值都大的值。范围分区非常适用于数据按时间范围组织的表,不同的时间段的数据属于不同的分区。
分区列是数字或日期类型
分区键必须为主键
1 创建分区
命令行方式
CREATE TABLE TEST.t1
(
id INT not NULL,
name VARCHAR2(10)
)
PARTITION BY RANGE(id)
(
PARTITION P1 VALUES LESS THAN (100),
PARTITION P2 VALUES LESS THAN (200)
)
STORAGE(INITIAL 1,NEXT 1,MINEXTENTS 1,FILLFACTOR 0);
图形化界面方式
创建成功
2 插入数据
插入1-199的数据
BEGIN
FOR i in 1...199 LOOP
INSERT INTO TEST.T1 VALUES(i,'aaa-'||i);
end loop;
commit;
end;
3 查询分区情况
select table_name,PARTITION_NAME from dba_tab_partitions where table_name='T1';
查询分区的数据
select count(*) from T1 PARTITION(P1);
4 增加分区
当插入数据256时
INSERT into T1 VALUES(256,'aaa-256');
没有合适的分区 ,添加分区
ALTER TABLE T1 ADD PARTITION P3 VALUES LESS THAN(300);
再执行添加256成功
5 指定表空间
CREATE table TEST.T2(
id INT not NULL,
name VARCHAR2(20)
)
PARTITION BY RANGE(id)
(
PARTITION P1 VALUES LESS THAN(100) TABLESPACE "test01",
PARTITION P2 VALUES LESS THAN(MAXVALUE) TABLESPACE "test02"
);
6 堆表
堆表分区需要在同一个表空间
nobranch 不设定分支
branch 指定并发支数
branch (a,b)指定并发和非并发支数
CREATE TABLE TEST.T3(id INT,name VARCHAR2(10))
PARTITION BY RANGE(id)
(
PARTITION P1 VALUES LESS THAN (100),
PARTITION P2 VALUES LESS THAN (200)
)
STORAGE(INITIAL 1,NEXT 1,MINEXTENTS 1,FILLFACTOR 0,NOBRANCH);