oracle数据库学习之表分区

先来看一个需求案例:
需求:在sales表中添加一个分区,最后这个分区信息为:

p1 less than(5000)
p2 less than(10000)
p3 less than(15000)
p4 less than(maxvalue)

要求以前的数据不能丢失。

create table sales(
    pid number(10) primary key,
    sale number(8,2)
)partition by range(sale)(   --按销售额分区
    partition p1 values less than(5000),
    partition p2 values less than(10000),
    partition p3 values less than(maxvalue)
);

分析:要更改后的分区信息不仅仅是多了p4分区,还要将原来的p3分区改成p4,所以这里要先备份原来 p3分区的信息,再添加。

  • 先备份p3分区中的数据
create table temp as select *from sales partition(p3);
select *from temp;
  • 删除最高的那个分区
alter table sales drop partition p3;
  • 查看现有的分区
select *from user_tab_partitions where table_name='SALES';
  • 创建新分区
alter table sales add partition p3 values less than(12000);
alter table sales add partition p4 values less than(maxvalue);
  • 查看索引
select *from user_indexes;
  • 重建索引
alter index SYS_C0011609 rebuild;
  • 将原来的数据还原
insert into sales select *from temp;
  • 删除备份表
drop table temp;

ok,到此已经完成了需求,现在可以查询一下是否已经更改了。

  • 查看p3分区
select *from sales partition(p3);

另外还有几个分区操作:

  • 截断分区 –删除指定分区中的数据
alter table sales truncate partition p4;
  • 合并分区
alter table sales merge partition p2,p3 into partition p3;
  • 拆分分区
alter table sales split partition p3 at(8000) into (partition p2,partition p3);

海量数据优化_分区索引与删除的关系

案例: 有一个项目团队发现他们的项目上线后会在上午的时候接到用户投诉查询缓慢但并不阻塞只不过时间比正常时慢很多
经过对数据库进行分析发现这个时间的数据库资源使用非常严重, CPU的使用率达到了80%,但此时数据库的压力并不大,通过进一步的分析发现数据库中运行了
大量的这样的语句: delete from t_name where j_time<to_date( '2015-04-04','yyyy-mm-dd');
通过与开发单位联系知道他们有一个定时任务在凌晨2点后开始执行,删除1个月前的数据以便释放空间.
此时一个月差不多有1000W条数据这样删除的开销非常的大。

解决方案 : 可以使用分区来解决这个问题. 设定保留历史数据的规则是: 删除最早一个月的数据。 按照这个需求,将需要删除的数据的表修改为分区表,
按照每个月一个分区的方式来创建分区 这样删除操作就变成了删除分区了

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值