【DB笔试面试571】在Oracle中,如何提升DML语句的效率?

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

         题目         部分

在Oracle中,如何提升DML语句的效率?程序员


     
         答案部分          



如果批量处理海量数据的话一般都是很复杂及缓慢的,方法也不少,可是一般的概念是:分批删除,逐次提交。下面介绍一下提升DML语句效率的经常使用方法。面试

DML语句sql

提升DML语句效率用方法数据库

UPDATE服务器

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

② 将表修改成NOLOGGING模式。网络

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

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

⑤ 能够建立一个临时的大的表空间用来应对这些更新动做。学习

⑥ 加大排序缓冲区。

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

⑧ 若是服务器有多个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程序员面试笔试宝典》,做者:李华荣。



watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=      

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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


watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


About Me:小麦苗      

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

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

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

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

 QQ:646634621  QQ群:618766405

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

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=DBA宝典

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= 喜欢就点击“好看”吧



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

相关文章
相关标签/搜索