Oracle学习:由Oracle间隔分区到interval函数学习

Oracle的分区索引

Oracle表分区是oracle开发中常用的技术,主要业务场景是针对到数据量,频繁查询的数据进行数据的分区处理,从而提高查询效率。
常用的分区方式主要有 range分区、hash分区、list分区、复合分区、间隔分区、system分区等。今天主要介绍间隔分区也就是由时间戳建立分区的知识,
如果想学习间隔分区,之前不得不先了解Oracle的interval函数

Oracle interval函数学习

interval函数通常返回一段时间差

语法 INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]
注意:时间差只精确到年和月,precision是年或月的精确域,有效范围是0-9,精确值默认是2

下面是示例

--返回30年的时间长度
select interval '30' year from dual;
--返回40个月的时间长度
select interval '40' month from dual;
--返回30年3个月的时间长度
select interval '30-3' year to month from dual;

接下来介绍跟interval有关的两个函数

numtodsinterval(n,‘interval_unit’) 将 n 转换为 interval_unit指定的值,取值可以使 day,hour,minute,second

--当 interval_unit 取值为day的时候,表示n day
select numtodsinterval(100,'day') from dual;
--当 interval_unit 取值为 hour 的时候,表示n hour->m day
 select numtodsinterval(100,'hour') from dual;
--当 interval_unit 取值为 minute 的时候,表示n minute->m hour
select numtodsinterval(100,'minute') from dual;
 --当 interval_unit 取值为 second 的时候,表示n second->m hour
select numtodsinterval(100,'second') from dual;
           
select numtodsinterval(100,'second'),numtodsinterval(100,'hour'),numtodsinterval(100,'minute'),numtodsinterval(100,'second') from dual;

运行结果如下
在这里插入图片描述

numtoyminterval(n,‘interval_unit’) 将n转换为interval_unit指定的值,取值可以是year month

--当 interval_unit 取值为year的时候,表示n year
select numtoyminterval(100,'year') from dual;
--当 interval_unit 取值为month的时候,表示n month -> myear
select numtoyminterval(100,'month') from dual;

运行结果如下
在这里插入图片描述

Oracle间隔分区

间隔分区(Interval Partitioning)是一种分区自动化的分区,可以指定指定时间间隔进行分区,这是Oracle 11g的新特性
间隔分区实际上是由range分区引申的,最终实现了range分区的自动化
注意:只有Oracle企业版才具有分区功能

语法

	create table interval_sale
	(sid int,sdate timestamp)
	partition by range(sdate)
	interval(numtoyminterval(1,'MONTH'))  --设置时间长度为1个月
	( 
	--使用一个时间设置为起始值,小于该时间的默认进p1分区
	partition p1 values less than (TIMESTAMP '2014-02-01 00:00:00.00')
	)

如上示例,演示了以sdate字段为索引,2014-02-01之前日期为第一个分区,建立间隔索引,其中interval(numtoyminterval(1,‘MONTH’)) 表示以一个月为时长建立分区,例如,添加日期 2014-03-06 则会自动添加到P3,也就是第三个分区之中。

补充一个小知识
若删除数据库中的表之后,分区还存在吗?
答案是肯定的,Oracle的机制是保留原来的分区
则若想恢复则使用

flashback table tablename to before drop;

若想删除分区则使用

purge recyclebin;
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值