Oracle的分区表

Oracle允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同的位置。被分区的表称为分区表,分成的每个部分称为一个分区。

什么时候使用分区表:

1)   数据量大小超过2GB。

2)   已有的数据和新添加的数据有明显的界限划分。

 

分区表的优缺点

优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
 
分区表的分类:
分为范围分区,列表分区,散列分区,复合分区,间隔分区和虚拟分区等。
间隔分区和虚拟分区是Oracle11g的新增特性。
 
范围分区:
范围分区(range)是应用范围比较广的表分区方式,它以列的值的范围作为分区得划分条件,将记录存放到列值的range分区中。
--创建范围分区表
create table students
(
stuid number primary key not null,
stuname varchar2(32) not null,
stuage number
)
--按照年龄划分
partition by range(stuage)
(
partition p1 values less than(18),
partition p2 values less than(40),
partition p3 values less than(60),
partition p4 values less than(maxvalue)
)
 
 
--向表中添加数据
insert into students(stuid,stuname,stuage) values(1,'李四',20);
insert into students(stuid,stuname,stuage) values(2,'张帆',16);
insert into students(stuid,stuname,stuage) values(3,'张三',35);
insert into students(stuid,stuname,stuage) values(4,'王八',65);
insert into students(stuid,stuname,stuage) values(5,'张飞',70);
insert into students(stuid,stuname,stuage) values(6,'林白',41)

--查询年龄在第二个分区表中的数据
select *from students partition(p2)
 
--删除年龄在第二个分区表中的数据
delete from students partition(p2)
 
注意事项:

(1)一般创建表分区时,都会将最后一个分区设置为maxvalue,使其他数据落入此分区。一旦需要某一数据时,可以利用拆分分区的技术将需要的数据从最后一个分区分离出去,单独形成一个分区。如果没有创建足够大的分区,插入的数据超出范围就会报错。

(2)如果插入的数据就是分区键上的值,则该数据落入下一分区。

 
 
 
间隔分区
间隔分区是Oracle 11g版本新引入的分区方法,是范围分区的一种增强功能,可以实现范围分区的自动化。他的优点为,在不需要创建表时就将所有分区划分清楚。间隔分区随着数据的增加会划分更多的分区,并自动创建新的分区。
 
--在现有表的基础上创建间隔分区(以年龄为划分区
create table studentback
partition by range(age)
interval(20)
(
partition p1 values less than(18)
)as select *from student

--查看间隔分区自动创建的分区名称
select  table_name,partition_name
from user_tab_partitions
where table_name=UPPER('studentback')

--查看间隔分区表

select *from studentback partition(SYS_P21)
select *from studentback partition(p1)

--以时间为划分区
CREATE table schoolback
        PARTITION BY RANGE(birthday)
        INTERVAL(NUMTOYMINTERVAL(1,'YEAR'))
        (PARTITION P1 VALUES LESS THAN (to_date('2014-01-01','yyyy/mm/dd')))
        AS SELECT * FROM school;

--查看间隔分区自动创建的分区名称
select  table_name,partition_name
from user_tab_partitions
where table_name=UPPER('schoolback')

 --查看分区数据
select *from schoolback partition(SYS_P24)

select *from schoolback partition(SYS_P23)

select *from schoolback partition(SYS_P22)

 select *from schoolback partition(P1)

select *from school

原文地址:https://www.cnblogs.com/sujulin/p/8080547.html