Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 大规模 delete,update 操作 注意事项

一.  说明       如果对大表进行大规模的delete 和update,那么可以注意一下如下说明:       (1) 查看执行计划,如果说删除的记录很多,走索引的成本会比全表扫描更大,因为更新数据时还需要做一些约束校验和创建index entry。而且对于多CPU 情况,全表扫描还可以使用并行的特性。              Oracle Parallel Execution(并行执行)http://www.linuxidc.com/Linux/2011-07/38009.htm        (2)如果表上有索引,B-Tree 索引可以unusable索引,函数索引则disable 索引,等操作结束之后在rebuild索引。       (3)如果是大规模的delete,那么可能还需要注意一下高水位的问题,在允许的情况下,可以用alter table move 来降低高水位,同时注意rebuild 索引。              Oracle 高水位(HWM: High Water Mark) 说明 http://www.linuxidc.com/Linux/2011-07/38010.htm 如果是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 _PRCODEIDX _STATEIDX _INSERTSYS_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<to_date(""2011-5-1"",""yyyy-mm-dd"");  SYS@dave2(db2)> 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"<to_date(""2011-05-01 00:00:00"", ""yyyy-mm-dd              hh24:mi:ss"")) 15 rows selected. --查看走执行计划的大规模update 操作SYS@dave2(db2)> 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 说明http://www.linuxidc.com/Linux/2011-06/37177.htm
  • 1
  • 2
  • 下一页
Oracle 10.2.0.4和10.2.0.5 中 OEM bug 8350262Oracle Parallel Execution(并行执行)相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数