首先明确分区表和表分区的区别:表分区是一种思想,分区表示一种技术实现。当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO。oracle分区表是oracle数据库提供的一种表分区的实现形式。表进行分区后,逻辑上仍然是一张表,原来的查询SQL同样生效,同时可以采用使用分区查询来优化SQL查询效率,不至于每次都扫描整个表

一、分区表基本操作

1、按时间分区表创建:

create table t_test (
pk_id number(30) not null,
add_date_time DATE,
constraintPK_T_TEST primary key (pk_id)
)
PARTITION BY RANGE (add_date_time)
(
PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS
)

其中add_date_time为分区字段,每一年一个分区。

插入100W数据

declare
i int := 1;
yearVARCHAR2(20);
begin
loop
year := CASEmod(i, 3)
WHEN 0 THEN
'2012-01-14 12:00:00'
WHEN 1 THEN
'2013-01-14 12:00:00'
ELSE
'2014-01-14 12:00:00'
END;
insert into t_test values(i, to_date(year, 'yyyy-mm-dd hh24:mi:ss'));
exit when i= 1000000;
i := i + 1;
end loop;
end;

查看分区表的分区的详细信息

Select table_name,partition_name,high_value fromdba_tab_partitions where table_name='T_TEST';

2、分区表修改

2.1增加一个分区

分两种情况:1.没有maxvalue分区。2.有maxvalue分区。我们创建的分区就是没有maxValue的分区

1.没有maxvalue分区添加新分区:

alter table t_test add partition t_test_2015 VALUESLESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACETS_MISPS ;

2、有maxvalue分区添加新分区:

有了maxvalue,就不能直接add partition,而是需要max分区split。例如我们将创建的分区的语句修改下:

create table t_test (
pk_id number(30) not null,
add_date_time DATE,
constraintPK_T_TEST primary key (pk_id)
)
PARTITION BY RANGE (add_date_time)
(
PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITIONt_test_2014 VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,
PARTITION t_test_maxVALUES LESS THAN (MAXVALUE)
)

增加一个2016年的分区语句为:

alter table t_test split partition t_test_max at(TO_DATE('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')) into (partitiont_test_2015,partition t_test_max);

2.2删除一个分区

alter table t_test drop partition t_test_2014 

注:droppartition时,该分区内存储的数据也将同时删除,你的本意是希望删除掉指定的分区但保留数据,你应该使用merge partition,执行该语句会导致glocal索引的失效需要重建全局索引

2.3合并分区

相邻的分区可以merge为一个分区,新分区的下边界为原来边界值较低的分区,上边界为原来边界值较高的分区,原先的局部索引相应也会合并,全局索引会失效,需要rebuild。

Alter  table t_test  merge partitions t_test_2013  ,t_Test_2014 into partition t_Test_2013_to_2014

二、对分区表进行查询

2.1查询

不使用分区查询:默认查询所有分区数据

select * from t_test 

使用分区查询:只查询该分区数据

select * from t_testpartition(t_test_2014) where add_date_time >=TO_DATE('2014-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss');

2.1插入

insert into t_test values(i, to_date(year,'yyyy-mm-dd hh24:mi:ss'));

2.1删除

使用分区删除

更新的时候指定了分区,而根据查询的记录不在该分区中时,将不会删除数据

delete t_test partition(t_test_2013) where id=1;

不使用分区删除

delete t_test  whereid=1;

2.1修改

使用分区更新

更新的时候指定了分区,而根据查询的记录不在该分区中时,将不会更新数据

delete t_test where id=1;
update t_test partition(t_test) set id=1 where id=2;

不使用分区

delete t_test where id=1;
update t_test set id=1 where id=2;

三、普通表和分区表互转

普通表—>分区表

1、新建一个字段一样的中间的分区表(T_NEW)

2、将T数据导入到T_NEW中

INSERT INTO T SELECT field1,filed2, …from T

将老表重命名

RENAME T TO T_OLD;

将新表重命名

RENAME T_NEW TO T;

这种适合静态操作,不保证数据一致性。如果在生产环境切换,利用利用在线重定义功能。

最新文章

  1. Android-webview和js互相调用
  2. 深入理解DOM节点类型第一篇——12种DOM节点类型概述
  3. Installing Oracle and ArcSDE on separate servers
  4. 【GOF23设计模式】适配器模式
  5. 利用appscan进行自动化定期安全测试
  6. JQuery $(function(){})和$(document).ready(function(){})
  7. Swift 自己主动引用计数机制ARC
  8. 2_1我的第一个应用hello world[wp8特色开发与编程技巧]
  9. zedboard - 轻量级以太网控制器LWIP
  10. 详解 Android 的 Activity 组件
  11. SQL约束脚本的用法
  12. JavaScript学习总结(二)
  13. Android学习4、Android该Adapter
  14. STM32 IAP 固件升级设计/U盘升级固件
  15. Linux显示目前登入系统的用户信息
  16. 用react重构个人网站 3-22
  17. docker学习笔记(3)
  18. select 下拉选择自动到textarea框
  19. 安装mongo php拓展
  20. IPAddress.Any 解决本地ip和服务器ip切换问题

热门文章

  1. 基于Berkeley DB实现的持久化队列
  2. Java 中String常用方法
  3. Rxjava, RxAndroid, Retrofit 等库的使用
  4. 网络IPC:套接字之建立连接
  5. Linux服务器命令行模式安装Matlab2014a
  6. 新安装 wampserver 出现 You don't have permission to access / on this server. 或者访问数据库出现You don't have permission to access /phpmyadmin/ on this server.(解决方法)转
  7. net core 静态文件
  8. linux驱动的多种init函数及其调用顺序
  9. JavaScript数据结构——队列的实现
  10. 冒泡排序(Bubble Sort)
  11. CentOS 7安装
  12. Kafka 0.11.0.0 实现 producer的Exactly-once 语义(英文)
  13. centos 6.5 安装redis
  14. SpringBoot事务注解@Transactional
  15. import Vue form 'vue’的意思
  16. HDU 4311 Meeting point-1(曼哈顿距离最小)
  17. nodejs windows安装
  18. Compare DML To Both REDO And UNDO Size
  19. 【DP】【CF855C】 Helga Hufflepuff's Cup
  20. Swagger2 添加HTTP head参数,解决用户是token信息保留