今天在找数据库分区表按月分区转成按天分区的方案,找到了原团队老友的文章. 想想我们大团队以前对整个数据库行业也算一定影响力的. 可惜现在都各散东西了.
---转原文
随着业务的快速发展,数据库中表的数据增量也会明显上升,之前一个月只有10w数据的,现在可能一天就有10w,这个时候如果还是按照以前按月分区的策略进行访问,那么sql扫描单个分区要访问300w的数据,为了保证效率,可以将表改为按天分区,并对sql谓词条件进行调整使得只访问单天的一个分区,这样性能就得到了保证。
一般来说,按月分区的表都是range分区,下面来介绍将按月分区改为按天分区的方法:
1.range间隔分区的情况
间隔分区无法手工add partition ,会出现如下报错:
ORA-14760 ADD PARTITION is not permitted on Interval partitioned objects
思路是先改为非间隔(Interval)分区 ,然后手工按天add partition ,并建议再改成按天间隔,详见如下案列:
create table tmp_test_range
(
id number,
name varchar2(30),
int_date date
)
PARTITION BY RANGE(int_date)
interval(NUMTOYMINTERVAL (1,'MONTH'))
(
partition P201511 values less than(to_date('20151201','y