直接进入主题----可以这样理解,当一个数据表在插入数据的时候,在几百条或者几千条数据中查询目标数据的时候不会花费多长时间,最多一两秒!但是随着数据的不断增加,当达到上万条或者几百万条的时候,当你在查询某个数据,这是可能会花费几分钟,甚至会导致系统挂掉!这个时候就需要考虑分区!
分区条件:
- 表的大小超过2GB;
- 表中含有历史数据,新的数据被增加到新的分区中.
- 提高查询的性能:对分区对象的查询可以
- 提高可用性:如果某个分区出现故障,表在其他分区的数据依然可以使用
- 维护方便:如果某个表出现故障,需要修复数据,质修复该分区即可
- 均衡I/O:可以吧不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区,不过Oracle提供了在线重定义表的功能
分区的几种类型及操作方法:范围分区、散列分区、列表分区、复合分区
范围分区:
顾名思义,就是根据某个值,根据给定值的范围将整个表分区,就像分数等级一样;
create table partition_range (
id number(19,0) not null,
name varchar2(128 char) not null,
score number(10,0) not null,
primary key(id)
)partition by range(score)
(
partition bujige values less than(60), --不及格
partition jige values less than(85), --及格
partition youxiu values less than(maxvalue) --优秀
<p>);<span style="font-family:Microsoft YaHei;font-size:14px;">
</span></p><p>
</p>
根据字段‘score’的范围分成不及格、及格和优秀三个分区,给定值的范围
插入测试数据:
insert into partition_range values(1,'sd1',54);
insert into partition_range values(2,'sd2',65);
insert into partition_range values(3,'sd3',87);
insert into partition_range values(4,'sd4',90);
insert into partition_range values(5,'sd5',76);
数据不多,但是每个分区都有
查询语句:
select * from partition_range
select * from partition_range partition(bujige)
select * from partition_range partition(jige)
select * from partition_range partition(youxiu)
结果分别是:
全部
不及格
及格
优秀
需要注意的三点:
1、每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。分区键的任何值等于或者大于这个上限值的记录都会被加入