oracle分区表带入SQL语句,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

没有涉及到任何数据的修改,只是修改数据字典,却导致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语句都在十分之一秒之内就可以完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值