当前位置:   article > 正文

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

interval partitioning 时间

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
  • 1
  • 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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下来介绍跟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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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;
  • 1
  • 2
  • 3
  • 4

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

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')
	)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

flashback table tablename to before drop;
  • 1

若想删除分区则使用

purge recyclebin;
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/678513
推荐阅读
相关标签
  

闽ICP备14008679号