oracle列表分区的ADD VALUES和DROP VALUES语句简介

LIST分区表的分区键值是离散的值,因此具有和其他分区与众不同的DDL维护语句,ADD VALUES和DORP VALUES。

ADD VALUES和DROP VALUES分别为指定的分区增加或减少对应的分区键值。和ADD PARTITION以及DROP PARTITION不同,ADD PARTITION和DROP PARTITION是分区操作,分别新增分区和删除分区,而ADD VALUES和DROP VALUES是对已有的分区进行操作。

和其他DDL有所区别的时,即使并不涉及数据的修改ADD VALUES或DROP VALUES操作仍然可能会很慢,看一个例子:

SQL> CREATE TABLE T_PART_LIST

2  (

3     OWNER VARCHAR2(30),

4     NAME VARCHAR2(30),

5     TABLESPACE_NAME VARCHAR2(30),

6     TYPE VARCHAR2(18)

7  )

8  PARTITION BY LIST (TABLESPACE_NAME)

9  (

10  PARTITION P1 VALUES ('SYSTEM'),

11  PARTITION P2 VALUES ('YANGTK'),

12  PARTITION P3 VALUES (DEFAULT)

13  );

表已创建。

SQL> SELECT COUNT(*)

2  FROM DBA_SEGMENTS;

COUNT(*)

----------

5627

SQL> SELECT COUNT(*)

2  FROM DBA_SEQUENCES;

COUNT(*)

----------

 224

SQL> INSERT INTO T_PART_LIST

2  SELECT A.OWNER, SEGMENT_NAME, TABLESPACE_NAME, SEGMENT_TYPE

3  FROM DBA_SEGMENTS A, DBA_SEQUENCES;

已创建1260448行。

SQL> COMMIT;

提交完成。

构建了一个数据量比较大的表,下面对分区PARTITION P1执行ADD VALUES语句:

SQL> SET TIMING ON

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P1

3  ADD VALUES ('JUST TEST');

表已更改。

已用时间:  00: 00: 05.33

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P1

3  DROP VALUES ('JUST TEST');

表已更改。

已用时间:  00: 00: 30.08

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

没有涉及到任何数据的修改,只是修改数据字典,却导致ADD VALUES用了5秒的时间,而DROP VALUES更是用了半分钟。这是由于ADD VALUES和DROP VALUES执行的时候,Oracle要去查询DEFAULT对应的分区或进行操作的分区,检查需要新增或删除的列是否存在,因此对应的分区越大,这个DDL耗时就越长。

而最简单的优化的方法就是在分区列上建立索引:

SQL> CREATE INDEX IND_T_LIST_TBSSPC_NAME

2  ON T_PART_LIST(TABLESPACE_NAME);

索引已创建。

已用时间:  00: 00: 05.24

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P1

3  ADD VALUES ('JUST TEST');

表已更改。

已用时间:  00: 00: 00.04

SQL> ALTER TABLE T_PART_LIST

2  MODIFY PARTITION P1

3  DROP VALUES ('JUST TEST');

表已更改。

已用时间:  00: 00: 00.02

可以看到,建立索引后,ADD VALUES和DROP VALUES语句都在十分之一秒之内就可以完成。

作者:51cto博客 Oracle小混子

时间: 2024-12-31 10:15:09

oracle列表分区的ADD VALUES和DROP VALUES语句简介的相关文章

oracle列表分区ADD VALUES或DROP VALUES包含数据变化

在介绍ADD VALUES和DROP VALUES语句的时候提到过,ADD VALUES和DROP VALUES只是数据字典上的变更,并不涉及数据的变化.因此如果ADD VALUES或DROP VALUES语句执行时,新增或删除的键值在数据库中已经存在,则会报错. 仍然借用上一篇文章中的例子: SQL> CREATE TABLE T_PART_LIST 2  ( 3     OWNER VARCHAR2(30), 4     NAME VARCHAR2(30), 5     TABLESPACE

【动手实践】Oracle 12.2 新特性:自动的列表分区创建

2017年来了,我们要启动新的学习征程了.在过去我们一直思考,什么样的内容能够更帮助大家了解和学习到有用的知识? 这个『动手实践』栏目就是这样一个改进和尝试吧,一个小小的范例,几分钟的线上实践(感谢Oracle),就能帮助大家熟悉一个知识点,几个重要的命令.如此是否会有不一样的体验?试一试吧. 在Oracle Database 12.2 之前,如果使用列表分区,当插入的数据超过了分区列表值设定,则会抛出异常:而如果存在大量的列表值需要定义,则可能需要一一设置. 在12.2引入的新特性中 - Au

【动手实践】Oracle 12.2新特性:多列列表分区和外部表分区

Oracle 12.2版本中,增加了大量的分区新特性,这其中包括: 自动的列表分区创建 在线的普通表转换分区表 支持只读分区和读写分区混合 以下介绍的三个特性同样是12.2新增的: 多列列表分区.外部表分区.维护过滤 而对于多列列表分区的支持,也是大家关注已久的特性,先看一下脚本(在 livesql.oracle.com 测试执行,推荐动手实践): CREATE TABLE dba_by_db_in_yhem  (dbalic           NUMBER,    username    

Oracle Partition 分区详细总结

原作者:    润明 2012-2-1  QQ:226399587  原帖地址:http://blog.csdn.net/runming918   此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作. 一.表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表,所以称作表空间. 分区表:当表中的数据量不断增大,查询数据

oracle表空间表分区详解及oracle表分区查询使用方法_oracle

此文从以下几个方面来整理关于分区表的概念及操作:1.表空间及分区表的概念2.表分区的具体作用3.表分区的优缺点4.表分区的几种类型及操作方法5.对表分区的维护性操作.(1.) 表空间及分区表的概念表空间:是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间. 分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间

Oracle list分区知识

应用场景:大数据 --1).创建一个分区表 create table a ( statis_date varchar2(8), id number, name varchar2(50), salary number ) partition by list(statis_date) ( partition Day_20121130 values('20121130'), partition Day_20121201 values('20121201'), partition Day_2012120

ORACLE的分区与索引

oracle的分区和索引可以说是它自己的亮点,可能你会说在其他数据库上也有,嗯是的,但oracle的种类性能便利性可以说是比较人性化的,下面我们通过实验来阐述它们的特性和功能. 1.分别给出一个B-tree索引针对全表扫描性能高和低的例子. 索引定义:oracle数据库中索引就是为了加快数据访问速度的一种目录结构 B-tree索引特点: (1)二叉树结构 (2)用比较大小方式查找索引块 (3)适合创建在键值重复率低的字段 例如  主键字段:强调表的参照关系,即可以被外键引用 唯一性约束字段:强调

EDB和Oracle在分区剪裁实践上的一点差别

前两天碰到一个问题,在EDB数据库中创建的一张分区表,需要使用分区本地索引和分区剪裁,但查看执行计划发现没能用到分区剪裁的功能. 创建分区表: CREATE TABLE test ( id bigint NOT NULL, bag_id bigint, bp_airline_code character varying(3), bp_flight character varying(5), bp_flight_suffix character varying(2), bp_flight_date

oracle11g-求数据库高手,关于oracle表分区的

问题描述 求数据库高手,关于oracle表分区的 现在项目有一个表,数据累计了1亿多条了,查询特别慢,问了公司的老员工,他们说分表,请问现在能分表吗,最好能给个步骤 解决方案 http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_7002.htm 在这个链接里面搜索"Partitioning Examples",在比较下面的位置.有各种例子,你可以看看哪个适用于你的情况