Oracle允许用户把一个表中的所有行分为几个部分,并将这些部分存储在不同的位置。被分区的表称为分区表,分成的每个部分称为一个分区。
什么时候使用分区表:
1) 数据量大小超过2GB。
2) 已有的数据和新添加的数据有明显的界限划分。
分区表的优缺点
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
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(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)
(1)一般创建表分区时,都会将最后一个分区设置为maxvalue,使其他数据落入此分区。一旦需要某一数据时,可以利用拆分分区的技术将需要的数据从最后一个分区分离出去,单独形成一个分区。如果没有创建足够大的分区,插入的数据超出范围就会报错。
(2)如果插入的数据就是分区键上的值,则该数据落入下一分区。
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