ORACLE 创建表分区
原文: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 创建表分区相关推荐
- oracle 创建范围分区表,Oracle创建表分区----范围分区
创建分区是数据库优化的一种手段,范围分区是表分区的一种. 创建范围分区的关键字是"RANGE",创建该分区后,其中的数据可以根据分区键值指定的范围进行分布,当数据在范围内均匀分布时 ...
- Oracle 的表分区详解
--本文转自https://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html 从以下几个方面来整理关于分区表的概念及操作: 表空间及分区 ...
- oracle有一百个人围一圈报数,案例:Oracle创建表时报session超过最大值 ORA-00018 证明递归ses...
天萃荷净 创建表时报session超过最大值 证明递归session存在并不在v$session中显示 我们在数据库的使用过程中,有时候会遇到类似情况,我会话是登录的,但是我进行某种操作,缺报sess ...
- oracle创建表空间.创建用户.创建表
oracle创建表空间.创建用户.创建表 转:http://blog.csdn.net/zhoubl668/archive/2009/02/02/3858576.aspx 在SQL*Plus中:(1) ...
- oracle 创建表空间 pcincrease,oracle建表空间 各种语句
oracle建表空间 各种语句 在创建用户之前,先要创建表空间: 其格式为:格式: create tablespace 表间名 datafile '数据文件名' size 表空间大小; 如: SQL& ...
- oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...
Mysql 创建表之前判断表是否存在,如果存在则删除已有表 DROP TABLE IF EXISTS sys_area; CREATE TABLE sys_area ( id varchar(64) ...
- Oracle 创建表空间,用户,赋值(简装)
一, 1.Oracle 创建表空间,用户,赋值(简装) C:\Documents and Settings\Administrator>sqlplus /nolog SQL> conn / ...
- Oracle创建表空间、创建用户以及授权
原文地址:Oracle创建表空间.创建用户以及授权 作者:chinacoolsword Oracle安装完后,其中有一个缺省的数据库,除了这个缺省的数据库外,我们还可以创建自己的数据库. 对于初学者来 ...
- oracle 建表字段设置,Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结...
关于Oracle创建表.删除表.修改表(添加字段.修改字段.删除字段)语句的简短总结. Oracle创建表: create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字 ...
最新文章
- python处理excel-使用python将数据写入excel
- 大话架构”阿里架构师的笔记——多研究些架构,少谈些框架
- 我在神策做研发丨做冲在前方的第一方队,造中国最好的开源 SDK
- BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)
- Python爬虫开发:ip代理的使用
- 数据告诉你:中年并不只有危机,创业或许正当时
- python实现多人聊天udp_python—多任务版udp聊天机器人
- Git Permission to fazhiyun86/Test.git denied to MarRoar
- 这8种保证线程安全的技术你都知道吗?
- 计算机系统结构选择题
- c++中父类子类对象指针相互转换,成员函数调用方式
- 【转】Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
- c#先进行uri解码_JavaScript、C# URL编码、解码总结
- 特殊情形的Riemann引理
- VMware 和 linux镜像文件
- Java后台返回PDF文件预览下载
- php进程是什么,PHP的进程模型是什么
- html简单导航页单页源码
- linux局域网下远程启动机器
- jquery鼠标移入文字提示_Jquery hover鼠标经过时弹出div动态提示语
热门文章
- C语言复制char*
- Linux上ftp的安装
- Google Maps API V3 之 图层
- 虚拟机异常关机,报错找不到vmdx文件,文件名增加flat的解决方法
- wingrub命令行启动深度linux,GRUB(包括WINGRUB)命令行模式引导安装Linux
- C#创建MDB数据库、并存放表格数据
- 分享35个非常漂亮的单页网站设计案例
- 作业12——分支限界解决最大团和图m着色问题
- 02矩阵01 —— 基本矩阵 : 对角矩阵、方幂、数量矩阵、转置矩阵、对称矩阵、逆矩阵、奇异矩阵、三角矩阵
- win10语言栏不见了_win7语言栏很重要,如果不见了怎么办?