题目         部分

在Oracle中,如何提高DML语句的效率?


     
         答案部分          



若是批量处理海量数据的话通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。下面介绍一下提高DML语句效率的常用方法。

DML语句

提高DML语句效率用方法

UPDATE

① 多字段更新使用一个查询。

② 将表修改为NOLOGGING模式。

③ 根据情况决定是否暂停索引,更新后恢复。避免在更新的过程中涉及到索引的维护。

④ 批量更新,每更新一些记录后及时进行提交动作,避免大量占用回滚段和临时表空间。

⑤ 可以创建一个临时的大的表空间用来应对这些更新动作。

⑥ 加大排序缓冲区。

⑦ 如果更新的数据量接近整个表,那么就不应该使用索引而应该采用全表扫描。

⑧ 如果服务器有多个CPU,那么可以采用PARELLEL Hint,可以大幅度地提高效率。

⑨ 建表的参数非常重要,对于更新非常频繁的表,建议加大PCTFREE的值,以保证数据块中有足够的空间用于UPDATE

⑩ 通过快速游标更新法,并对ROWID进行排序更新,如下所示:

 1DECLARE
2  V_COUNTER NUMBER;
3BEGIN
4  V_COUNTER := 0;
5  FOR CUR IN (SELECT A.AREA_CODE, B.ROWID ROW_ID FROM TA A, TB B WHERE A.ID = B.ID ORDER BY B.ROWID ) LOOP
6    UPDATE TB SET AREA_CODE = CUR.AREA_CODE WHERE ROWID = CUR.ROW_ID;
7    V_COUNTER := V_COUNTER + 1;
8    IF (V_COUNTER >= 1000) THEN
9      COMMIT;
10      V_COUNTER := 0;
11    END IF;
12  END LOOP;
13  COMMIT;
14END;
         


⑪ 当需要更新的表是单个或者被更新的字段不需要关联其它表带过来中的数据(例如:外键约束),则选择标准的UPDATE语句,速度最快,稳定性最好,并返回影响条数。如果WHERE条件中的字段加上索引,那么更新效率就更高。但若需要关联表更新字段时,UPDATE的效率就非常差。此时可以采用MERGE且非关联形式高效完成表对表的UPDATE操作。

INSERT

① 将表修改为NOLOGGING模式。

② 暂停索引。

③ 以APPEND模式插入。

④ 加入PARALLEL,采用并行插入。

DELETE

① 利用FORALL完成。

② 利用ROWIDROW_NUMBER() OVER()高效删除重复记录。

③ 将表修改为NOLOGGING模式。

 


以上这些方法都是抛砖引玉,数据库优化没有最好的方法,只有最合适的方法。

& 说明:

有关SQL优化的一些案例可以参考我的BLOGhttp://blog.itpub.net/26736162/viewspace-1254942/http://blog.itpub.net/26736162/viewspace-1244055/http://blog.itpub.net/26736162/viewspace-1244050/http://blog.itpub.net/26736162/viewspace-1244044/http://blog.itpub.net/26736162/viewspace-1222431/http://blog.itpub.net/26736162/viewspace-1222423/http://blog.itpub.net/26736162/viewspace-1218671/http://blog.itpub.net/26736162/viewspace-1209796/http://blog.itpub.net/26736162/viewspace-1208814/http://blog.itpub.net/26736162/viewspace-1684396/http://blog.itpub.net/26736162/viewspace-2125815/



本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。



     

---------------优质麦课------------

 详细内容可以添加麦老师微信或QQ私聊。



About Me:小麦苗      

 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

 版权所有,欢迎分享本文,转载请保留出处

 QQ:646634621  QQ群:618766405

 提供OCP、OCM和高可用部分最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

DBA宝典

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

喜欢就点击“好看”吧



本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【DB笔试面试845】在Oracle中,sqlnet.ora文件的作用是什么?
  2. 【DB宝31】Oracle DG环境中主库使用rman做不完全恢复后,备库如何
  3. 【高可用】Oracle高可用培训(RAC+DG+OGG)--包括11g、12c、18c、19c
  4. 【DB宝32】Oracle DG环境中主库做闪回操作后,备库如何修复继续同
  5. pandas的dataFrame输出不换行
  6. Linux格式化报错mkfs.ext4: undefined symbol: ext2fs_numeric_p
  7. MySQL中日期转换 FROM_UNIXTIME和UNIX_TIMESTAMP
  8. 【转载】 MySQL数据库“十宗罪”(十大经典错误案例)
  9. MySQL之mysqlcheck、check、optimize和analyze

随机推荐

  1. 使用 Xtrabackup 在线对MySQL做主从复制
  2. 阿里云服务器忘记mysql的登录密码时候如
  3. 如何从MySQL DBs的不同表中提取create语
  4. 装机建项目vs2017和mysql5.7下建项目用EF
  5. 是一个mysql临时表,每个用户访问创建它的
  6. MySQL 一对多查询
  7. 中文乱码问题
  8. 可以在SELECT语句中嵌入描述语法吗?
  9. MySQL判断索引存在并删除索引的存储过程
  10. Linux上跑MySQL优化技巧