分区小节--滑动窗口

1:oracle 分区的最大的好处是容易管理实现了滑动窗口
2:全表扫描时的分区消除(一般是取得行数较多,不适合用索引的时候)
3:分区的并发
然而这几条都不适合OLTP


滑动窗口完整例子

创建分区表
create table t  (a number,b number,c number)
partition by range(a)
(
partition p1 values less than(100),
partition p2 values less than(300)
)
向分区1插入数据
begin
 for i in 0..99 loop 
 insert into t values(i,i,i);
 end loop;commit;
end;
向分区2插入数据
begin
 for i in 100..199 loop 
 insert into t values(i,i,i);
 end loop;commit;
end;
select * from t partition(p1)
select * from t partition(p2)

创建全局索引
create index t_global_idx on t(a) global
创建本地索引
create index t_local_idx on t(b) local

新建表t1
create table t1  (a number,b number,c number)
create index t1_idx on t1(b)
select * from t1
新建表t2
create table t2  (a number,b number,c number)
create index t2_idx on t2(b)
begin
 for i in 200..299 loop 
 insert into t2 values(i,i,i);
 end loop;commit;
end;
select * from t2

分区p1和表t1中的数据交换
alter table t exchange partition p1 
with table t1
including indexes 
without validation
select * from t1
select * from t partition(p1)
分区p2和表t2中的数据交换
alter table t exchange partition p2 
with table t2
including indexes 
without validation
select * from t2
select * from t partition(p2)

查看最后的分区表t
select * from t

由于分区的交换会导致全局索引的失效所以需要重建
没有重建索引
select * from t where a=200
SELECT STATEMENT
 PARTITION RANGE SINGLE   
  TABLE ACCESS FULL 
重建索引
alter index t_global_idx rebuild

select * from t where a=200
SELECT STATEMENT
 TABLE ACCESS BY GLOBAL INDEX ROWID
  INDEX RANGE SCAN

或者指定分区交换的时候自动更新全局索引,只要在交换分区语句后加上红色部分就可以了。
alter table t exchange partition p1 
with table t1
including indexes 
without validation
update global indexes
这种方法由于是在交换的过程中自动更新索引, 相比手动重建索引消耗资源更多,但是这种方式可以提供持续的有效性, 对用户的影响比较小。牺牲性能换取持续的有效性。

手动重建索引,如果表中数据较多,则会有很长一段时间可用性非常低。对用户影响较大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值