实际开发中,由于历史表累积数量过大,未分区历史表插入数据太慢,影响到程序运行,因此创建了分区表
rangef分区(范围分区)
语法:create table tb1(
id varchar2(10 char) not null,
dte varchar2(20 char) null
)
partition by range(dte)(
partition p202001 values less than (to_date('2020/02/01 00:00:00','yyyy-mm-dd hh24:mi:ss')),
partition p202001 values less than (to_date('2020/03/01 00:00:00','yyyy-mm-dd hh24:mi:ss'))
);
commit;
其中less than : 对于日期类,我测试的结果是小于
插入数据时,如果想插入的速度加快,可以增加并行,并行需要占用数据库的内存空间,下面是开启4个并行
insert /*+append */ into tb1 select /*+parallel(b,4)*/ b.* from tb2 b;
由于delete语句会导致内存空间不会释放,脚本报错后需要重复执行等问题,为了保证数据的准确性,提高效率,对于分区表的数据,我们使用分区交换的方式插入数据,分区交换会导致分区索引失效,因此分区交换后要重建索引,开发中我们开始是将表所有索引全部删除重建,但是后来历史表数据量过大,每次重建索引占用内存过大,后来改成了每次分区索引重建