当前位置:  数据库>oracle

Oracle 大规模 delete,update 操作 注意事项

    来源: 互联网  发布时间:2017-04-05

    本文导语: 一.  说明        如果对大表进行大规模的delete 和update,那么可以注意一下如下说明:        (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建i...

一.  说明

       如果对大表进行大规模的delete 和update,那么可以注意一下如下说明:

       (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index entry。而且对于多CPU 情况,全表扫描还可以使用并行的特性。

              Oracle Parallel Execution(并行执行)

 

       (2)如果表上有索引,B-Tree 索引可以unusable索引,函数索引则disable 索引,等操作结束之后在rebuild索引。

       (3)如果是大规模的delete,那么可能还需要注意一下高水位的问题,在允许的情况下,可以用alter table move 来降低高水位,同时注意rebuild 索引。

              Oracle 高水位(HWM: High Water Mark) 说明

 

如果是OLTP的生产环境,对于禁用索引和高水位处理的操作要慎重。

 

 

二. 相关测试

 

--查看表中记录数

SYS@dave2(db2)> select count(*) from dave;

  COUNT(*)

----------

   3080115

 

--查看索引信息

SYS@dave2(db2)> select index_name from dba_indexes where table_name=''DAVE'';

 

INDEX_NAME

------------------------------

IDX _PRCODE

IDX _STATE

IDX _INSERT

SYS_C005469

 

--创建一个备份表,下次使用

SYS@dave2(db2)> create table dave1 as select /*+parallel(t,3)*/ * from dave t;

Table created.

 

--查看执行计划

SYS@dave2(db2)> explain plan for delete from dave where time_insert select * from table(dbms_xplan.display);

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 2615685836

 

---------------------------------------------------------------------------

| id  | operation          | name | rows  | bytes | cost (%cpu)| time     |

---------------------------------------------------------------------------

|   0 | delete statement   |      |  1369k|    26m|  7916   (3)| 00:01:35 |

|   1 |  delete            | dave |       |       |            |          |

|*  2 |   table access full| dave |  1369k|    26m|  7916   (3)| 00:01:35 |

---------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

---------------------------------------------------

 

   2 - filter("time_insert" explain plan for update dave d set getcard_code=10 where state=2;

 

 

Explained.

 

SYS@dave2(db2)> select * from table(dbms_xplan.display);

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

Plan hash value: 3706120077

 

-------------------------------------------------------------------------------

| id  | operation         | name      | rows  | bytes | cost (%cpu)| time     |

-------------------------------------------------------------------------------

|   0 | update statement  |           | 96254 |   469k|  2533   (1)| 00:00:31 |

|   1 |  update           | dave      |       |       |            |          |

|*  2 |   index range scan| idx_state | 96254 |   469k|   194   (2)| 00:00:03 |

-------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

 

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

---------------------------------------------------

 

   2 - access("STATE"=2)

 

14 rows selected.

 

--禁用索引

SYS@dave2(db2)> alter index idx_state unusable;

Index altered.

 

SYS@dave2(db2)> select status from dba_indexes where index_name=''IDX_STATE'';

STATUS

--------

UNUSABLE

--如果是对进行delete 操作,那么相关的索引要全部禁用才起作用。

 

 

--更新数据

SYS@dave2(db2)> update dave d set  state=10 where state=2;

101837 rows updated.

 

SYS@dave2(db2)> commit;

Commit complete.

 

--rebuild 索引

SYS@dave2(db2)> alter index idx_state rebuild;

Index altered.

 

Oracle alter index rebuild 说明


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle的导入导出注意事项及心得分享
  • Oracle数据库表设计时的注意事项
  • Oracle数据远程连接的四种设置方法和注意事项
  • MySQL转换Oracle的需要注意的七个事项
  • MYSQ数据L迁到ORACLE的的注意事项
  • 寻求在solaris8下安装oracle8.1.7和weblogic6.1的详细步骤和注意事项
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3