Oracle分区表使用记录

分区表的使用记录

使用分区表的产生原因

由于线上表历史数据太多,准备删除清理
简单的使用delete语句进行删除,结果因为备库硬盘空间不够,无法删除。

get经验,对于数据量巨大的表删除操作
1、delete产生的日志太大,如果表都不需要应使用drop命令
2、如果需要保留数据,先insert 到新建的表中,然后对表进行重命名操作
3、根据自身业务考虑使用数据库分区机制,对于不要的数据可以直接删除对应分区

了解分区

分区表分为四类:1、范围分区表 2、列表分区表 3、哈希分区表 4、组合分区表
了解以后准备对表进行按日期分区,但是发现设置分区的时候 必须有VALUES LESS THEN子句,那么如果想设置的未来的时间分区,怎么办?

查了相关资料得到如下信息

1、RANGE 范围分区介绍
说明:针对记录字段的值在某个范围。
规则:
(1)、每一个分区都必须有一个VALUES LESS THEN子句,它指定了一个不包括在该分区中的上限值。
分区键的任何值等于或者大于这个上限值的记录都会被加入到下一个高一些的分区中。
(2)、所有分区,除了第一个,都会有一个隐式的下限值,这个值就是此分区的前一个分区的上限值。
(3)、在最高的分区中,MAXVALUE被定义。MAXVALUE代表了一个不确定的值。这个值高于其它分区中的任何分区键的值,
也可以理解为高于任何分区中指定的VALUE LESS THEN的值,同时包括空值。若不添加maxvalue的分区插入数值一旦超过设置的最大上限会报错。

2、oracle 11g 支持自动分区,不过得在创建表时就设置好分区。

自动分区关键字是numtoyminterval和numtodsinterval

区别是:
numtodsinterval(,) ,x 是一个数字,c 是一个字符串。
把 x 转为 interval day to second 数据类型。
常用的单位有 (‘day’,‘hour’,‘minute’,‘second’)。

numtoyminterval (,)
将 x 转为 interval year to month 数据类型。
常用的单位有 (‘year’,‘month’)。

实例 :每个月自动创建分区
create table test_table
(id VARCHAR2(24 CHAR) not null,
CLEAR_DATE DATE

PARTITION BY RANGE (CLEAR_DATE) INTERVAL (numtoyminterval(1, ‘month’))
( PARTITION part01 VALUES LESS THAN (TO_DATE(‘2020-08-01’, ‘yyyy-mm-dd’)) );

创建索引

当查询经常跨分区查,则应该使用全局索引,因为这是全局索引比分区索引效率高。
当查询在一个分区里查询时,则应该使用 local 索引,因为本地索引比全局索引效率高。

目前线上查询等无影响,如有相关问题,后续继续记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值