原文:https://www.cnblogs.com/yuxiaole/p/9809294.html

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

  如果已经存在的表需要改分区表,就需要将当前表 rename后,再创建新表,然后复制数据到新表,然后删除旧表就可以了。

一、为什么要分区(Partition)

  1、一般一张表超过2G的大小,ORACLE是推荐使用分区表的。

  2、这张表主要是查询,而且可以按分区查询,只会修改当前最新分区的数据,对以前的不怎么做删除和修改。

  3、数据量大时查询慢。

  4、便于维护,可扩展:11g 中的分区表新特性:Partition(分区)一直是 Oracle 数据库引以为傲的一项技术,正是分区的存在让 Oracle 高效的处理海量数据成为可能,在 Oracle 11g 中,分区技术在易用性和可扩展性上再次得到了增强。

  5、与普通表的 sql 一致,不需要因为普通表变分区表而修改我们的代码。

二、oracle 11g 如何按天、周、月、年自动分区

2.1 按年创建

numtoyminterval(1, 'year')

--按年创建分区表
create table test_part
(ID NUMBER(20) not null,REMARK VARCHAR2(1000),create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'year'))
(partition part_t01 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));--创建主键
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;
-- Create/Recreate indexes
create index test_part_create_time on TEST_PART (create_time); 

2.2 按月创建

numtoyminterval(1, 'month')

--按月创建分区表
create table test_part
(ID NUMBER(20) not null,REMARK VARCHAR2(1000),create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month'))
(partition part_t01 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));--创建主键
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;

2.3 按天创建

NUMTODSINTERVAL(1, 'day')

--按天创建分区表
create table test_part
(ID NUMBER(20) not null,REMARK VARCHAR2(1000),create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (NUMTODSINTERVAL(1, 'day'))
(partition part_t01 values less than(to_date('2018-11-12', 'yyyy-mm-dd')));--创建主键
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;

2.4 按周创建

NUMTODSINTERVAL (7, 'day')

--按周创建分区表
create table test_part
(ID NUMBER(20) not null,REMARK VARCHAR2(1000),create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (NUMTODSINTERVAL (7, 'day'))
(partition part_t01 values less than(to_date('2018-11-12', 'yyyy-mm-dd')));--创建主键
alter table test_part add constraint test_part_pk primary key (ID) using INDEX;

2.5 测试

可以添加几条数据来看看效果,oracle 会自动添加分区。

--查询当前表有多少分区
select table_name,partition_name from user_tab_partitions where table_name='TEST_PART';--查询这个表的某个(SYS_P21)里的数据
select * from TEST_PART partition(SYS_P21);

三、numtoyminterval 和 numtodsinterval 的区别

3.1 numtodsinterval(<x>,<c>) ,x 是一个数字,c 是一个字符串。

把 x 转为 interval day to second 数据类型。

常用的单位有 ('day','hour','minute','second')。

测试一下:

 select sysdate, sysdate + numtodsinterval(4,'hour') as res from dual;

结果:

3.2 numtoyminterval (<x>,<c>)

将 x 转为 interval year to month 数据类型。

常用的单位有 ('year','month')。

测试一下:

select sysdate, sysdate + numtoyminterval(3, 'year') as res from dual;

结果:

四、默认分区

4.1 partition part_t01 values less than(to_date('2018-11-01', 'yyyy-mm-dd'))。

表示小于 2018-11-01 的都放在 part_t01 分区表中。

五、给已有的表分区

需要先备份表,然后新建这个表,拷贝数据,删除备份表。

-- 1. 重命名
alter table test_part rename to test_part_temp;-- 2. 创建 partition table
create table test_part
(ID NUMBER(20) not null,REMARK VARCHAR2(1000),create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (numtoyminterval(1, 'month'))
(partition part_t1 values less than(to_date('2018-11-01', 'yyyy-mm-dd')));-- 3. 创建主键
alter table test_part add constraint test_part_pk_1 primary key (ID) using INDEX;-- 4. 将 test_part_temp 表里的数据迁移到 test_part 表中
insert into test_part_temp select * from test_part;-- 5. 为分区表设置索引
-- Create/Recreate indexes
create index test_part_create_time_1 on TEST_PART (create_time); -- 6. 删除老的 test_part_temp 表
drop table test_part_temp purge;-- 7. 作用是:允许分区表的分区键是可更新。
-- 当某一行更新时,如果更新的是分区列,并且更新后的列植不属于原来的这个分区,
-- 如果开启了这个选项,就会把这行从这个分区中 delete 掉,并加到更新后所属的分区,此时就会发生 rowid 的改变。
-- 相当于一个隐式的 delete + insert ,但是不会触发 insert/delete 触发器。
alter table test_part enable row movement;

六、全局索引和 Local 索引

我的理解是:

  当查询经常跨分区查,则应该使用全局索引,因为这是全局索引比分区索引效率高。

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

扩展:https://blog.csdn.net/lively1982/article/details/9398485

分区索引:

https://www.cnblogs.com/grefr/p/6095005.html

https://blog.csdn.net/w892824196/article/details/82803889

ORACLE 创建表分区相关推荐

  1. oracle 创建范围分区表,Oracle创建表分区----范围分区

    创建分区是数据库优化的一种手段,范围分区是表分区的一种. 创建范围分区的关键字是"RANGE",创建该分区后,其中的数据可以根据分区键值指定的范围进行分布,当数据在范围内均匀分布时 ...

  2. Oracle 的表分区详解

    --本文转自https://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html 从以下几个方面来整理关于分区表的概念及操作: 表空间及分区 ...

  3. oracle有一百个人围一圈报数,案例:Oracle创建表时报session超过最大值 ORA-00018 证明递归ses...

    天萃荷净 创建表时报session超过最大值 证明递归session存在并不在v$session中显示 我们在数据库的使用过程中,有时候会遇到类似情况,我会话是登录的,但是我进行某种操作,缺报sess ...

  4. oracle创建表空间.创建用户.创建表

    oracle创建表空间.创建用户.创建表 转:http://blog.csdn.net/zhoubl668/archive/2009/02/02/3858576.aspx 在SQL*Plus中:(1) ...

  5. oracle 创建表空间 pcincrease,oracle建表空间 各种语句

    oracle建表空间 各种语句 在创建用户之前,先要创建表空间: 其格式为:格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小; 如: SQL& ...

  6. oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...

    Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) ...

  7. Oracle 创建表空间,用户,赋值(简装)

    一, 1.Oracle 创建表空间,用户,赋值(简装) C:\Documents and Settings\Administrator>sqlplus /nolog SQL> conn / ...

  8. Oracle创建表空间、创建用户以及授权

    原文地址:Oracle创建表空间.创建用户以及授权 作者:chinacoolsword Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来 ...

  9. oracle 建表字段设置,Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结...

    关于Oracle创建表.删除表.修改表(添加字段.修改字段.删除字段)语句的简短总结. Oracle创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字 ...

最新文章

  1. python处理excel-使用python将数据写入excel
  2. 大话架构”阿里架构师的笔记——多研究些架构,少谈些框架
  3. 我在神策做研发丨做冲在前方的第一方队,造中国最好的开源 SDK
  4. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)
  5. Python爬虫开发:ip代理的使用
  6. 数据告诉你:中年并不只有危机,创业或许正当时
  7. python实现多人聊天udp_python—多任务版udp聊天机器人
  8. Git Permission to fazhiyun86/Test.git denied to MarRoar
  9. 这8种保证线程安全的技术你都知道吗?
  10. 计算机系统结构选择题
  11. c++中父类子类对象指针相互转换,成员函数调用方式
  12. 【转】Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
  13. c#先进行uri解码_JavaScript、C# URL编码、解码总结
  14. 特殊情形的Riemann引理
  15. VMware 和 linux镜像文件
  16. Java后台返回PDF文件预览下载
  17. php进程是什么,PHP的进程模型是什么
  18. html简单导航页单页源码
  19. linux局域网下远程启动机器
  20. jquery鼠标移入文字提示_Jquery hover鼠标经过时弹出div动态提示语

热门文章

  1. C语言复制char*
  2. Linux上ftp的安装
  3. Google Maps API V3 之 图层
  4. 虚拟机异常关机,报错找不到vmdx文件,文件名增加flat的解决方法
  5. wingrub命令行启动深度linux,GRUB(包括WINGRUB)命令行模式引导安装Linux
  6. C#创建MDB数据库、并存放表格数据
  7. 分享35个非常漂亮的单页网站设计案例
  8. 作业12——分支限界解决最大团和图m着色问题
  9. 02矩阵01 —— 基本矩阵 : 对角矩阵、方幂、数量矩阵、转置矩阵、对称矩阵、逆矩阵、奇异矩阵、三角矩阵
  10. win10语言栏不见了_win7语言栏很重要,如果不见了怎么办?