分区表概述



分区:将一个表和一个索引物理上分解为更小、更容易管理。逻辑上是一个表或者一个索引。物理上分割成多个分区,每个分区是一个独立的段(对象),可以独自处理,也可以作为一个大对象独立处理。

分区作用:

1、提高数据库可用性:

分区中的某一个或者几个分区不可用,并不意味着其他分区不可用

drop table t cascade constraint;
create table t (id number,name varchar2(20))
partition by hash(name)
(partition part1 tablespace learn,
partition part2  tablespace example);
insert into t select level, to_char(level) from dual connect by level<1000 ;
commit;
select * from t partition(part1);
select * from t  partition(part2);
alter tablespace learn offline;
select * from t partition(part1);---part1的表空间脱机 不能查询
select * from t where name=3;---这个查询因为没有提示oracle优化器name属于part2,所以oracle直接在查看分区情况,最后导致无法查询
select * from t partition(part2) where name=3;---这个查询告诉了oracle优化器使用那个分区
但是有些文档说select * from t where name=3优化器会根据3这个键值所在的分区,直接消除了分区part1,所以能够查询,我测试的数据库版本Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

出错时,减少停机时间,因为只需要恢复不可用分区,不需要整个大对象进行恢复。


2、去掉大段管理,小段更容易管理

现在只需要一个个小分区进行管理不需要一个大对象进行管理,从而速度更快、占用资源更少。

对于索引:rebuild时,对每一个分区进行重建,这样需要临时空间为仅仅是分区的大小,而大对象所要的临时空间则是整个大对象的大小,速度更慢,中途停电什么的 ,一切重头开始。

对于表来说做moe操作时,相同问题。alter table t move partition part2;

对于大量分区的表

begin
 for x in (select  distinct t.partition_name from dba_tab_partitions t ,dba_data_files t1    
                  where t.table_name=upper('t') and t.table_owner=user and 
                  t.tablespace_name=t1.tablespace_name 
                  and t1.online_status='ONLINE') loop
                 execute immediate 'alter table t move partition '||x.partition_name;
                 end loop;
end;

3、改善查询性能

4、可以把修改分布到多个独立的分区上,从而减少大容量OLTP系统竞争。


分区类型:

1、区间分区

2、散列分区

3、列表分区

4、间隔分区:这个与区间分区非常相似,区别在于数据库自己可以创建分区

5、引用分区:允许在由外键强制的父/子关系中的子表继承父表的机制,实际就是允许子表依据父表中的字段对子表进行分区。

6、组合分区:区间分区和散列分区组合、区间分区和列表分区组合



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值