在Oracle性能优化时,用exists替代in,用表链接替代exists,关于前者,一般效果比较明显,exists效率明显比in高,但是如果要想表连接的效率比exists高,必须在from子句中,将记录多的表放在前面,记录少的表放后面。

关于select... bulk collect into ... limit ...或fetch... bulk collect into ... limit ...句型:

在使用如上句型时,通常我们都会用for或forall循环进行insert/update/delete操作。

for/forall循环方法有好几种,如

第1种:

for tp in tmp.FIRST.. tmp.LAST loop .... end loop;

第2种:

for tp in 1 .. tmp.COUNT loop .... end loop;

第3种:

for tp in indecs of tmp loop .... end loop;

上面的第1种方法有一个致使的弱点,就是在select... bulk collect into ... limit ...或fetch... bulk collect into ... limit ...没有取到数据时,如果没有exit,则第一种方法会报错:ORA-06502: PL/SQL: numeric or value error。因为tmp.FIRST访问不存在,为空值。必须对错误进行错误处理。而在嵌套的循环中,内层的循环是不能用exit的,所有必然遇到这种错误。

第2种方法不会出现这种问题,第3种方法没有试过。

借鉴网上的做法,给出一种使用绑定变量的批量删除数据的存储过程:

PROCEDURE RemoveBat2DjaRecords(参数)

AS type RowIdArray is table of rowid index by binary_integer;

rowIds RowIdArray;

BEGIN loop select rowid BULK COLLECT into rowIds from 表名

where 查询条件 and rownum <= 1000;

exit when SQL%NOTFOUND;

forall k in 1 .. rowIds.COUNT

delete from 表名 where rowid = rowIds(k);

commit;

end loop;

EXCEPTION when OTHERS then rollback;

END RemoveBat2DjaRecords;

上面的1000条是一个可以设定的数,根据你的服务器性能可以扩大或缩小。

Oracle执行exists优化,PHP_解决Oracle性能优化中的问题, 在Oracle性能优化时,用exists - phpStudy...相关推荐

  1. oracle大于号怎么用,解决MyBatis的mapper中SQL小于号或大于号报错-tag name expected

    通常写SQL我们都会在Navicat里面写好条件测试没问题之后才会把SQL放到mapper里面,有次我在写Oracle的分页的时候因为用到了<=符号,在Navicat测试的时候是没问题的,但是放 ...

  2. mysql not in 性能_SQL中Execpt和not in 性能区别

    本文章介绍关于SQL中Execpt和not in 性能区别 ,有需要的同学可以仔细的看看这两个的性能哦. 主要讲 except 和 not in 的性能上的区别. 代码如下 复制代码 CREATE T ...

  3. distinct mysql性能_MySQL中distinct和group by性能比较

    MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...

  4. 解决 Oracle10g安装过程中无法确定主机的IP地址时产生该异常错误

    今天在虚拟机中安装Oracle遇到了小小的问题,跳出对话框"无法确定主机的IP地址时产生该异常错误",查了一下资料还是解决了,这里吧解决办法和大家分享一下! 首先我们需要知道自己的 ...

  5. oracle 如何边看表中字段信息_【Oracle移行到Sqlserver完美解决案】④sqluldr2+bulk 32H=3H...

    在[Oracle移行到Sqlserver完美解决案]③执行时间改善案bcp+bulk 一文中,移行实现了,但数据600多万件,占内存3G多的操作log表,移行需要32H,这个时间我们是无法接受的. 原 ...

  6. oracle中的left函数,Oracle Left Join

    oracle函数 的 Oracle Left Join 在本教程中,您将学习如何使用Oracle LEFT JOIN子句来查询多个表中的数据. Oracle LEFT JOIN子句简介 以下语句说明连 ...

  7. 使用什么优化器_在机器学习项目中该如何选择优化器?

    导读 几种流行的优化器的介绍以及优缺点分析,并给出了选择优化器的几点指南. 本文概述了计算机视觉.自然语言处理和机器学习中常用的优化器.此外,你会找到一个基于三个问题的指导方针,以帮助你的下一个机器学 ...

  8. php中include的作用,PHP 中关于 include() 函数的性能

    简明现代魔法 -> PHP服务器脚本 -> PHP 中关于 include() 函数的性能 PHP 中关于 include() 函数的性能 2010-03-03 PHP程序员最常用的两个函 ...

  9. 简单介绍oracle执行计划,Oracle性能优化之oracle中常见的执行计划及其简单解释

    一.访问表执行计划 1.table access full:全表扫描.它会访问表中的每一条记录(读取高水位线以内的每一个数据块). 2.table access by user rowid:输入源ro ...

最新文章

  1. hdu2371 矩阵乘法(求序列位置改变m次后的序列)
  2. Topaz Labs AI深度学习图像处理(Gigapixel、Video Enhance)
  3. 谱聚类、Chameleon聚类、PCCA、SOM、Affinity Propagation
  4. servlet请求和响应的过程
  5. (百度、谷歌)地图经纬度gps偏移解决办法:gps纠偏数据库纠偏
  6. python pygame鼠标点击_pygame系列_mouse鼠标事件
  7. 如何优雅地根治null值引起的Bug?!
  8. 软考历程(4)——安全问题之病毒
  9. 使用百度识图 完成图片识别和文字识别
  10. 实践致知第6享:QQ截图的文字识别功能
  11. id 查找apple,怎么查找我的apple id?
  12. wordpress批量导入html文章,wordpress文章采集发布批量上传教程(火车头)
  13. iOS 13 修改状态栏背景色
  14. 基于ResNet50网络的简单垃圾分类网络
  15. 界面今日头条:2018年中国旅游城市排行榜
  16. 判断一周中的某一天是否为工作日
  17. USB host 与 OTG 怎么切换
  18. 计算机的发展与什么息息相关,第一单元第二课《计算机的发展与应用》.doc
  19. ArcBlock ⑦ 月报 | Forge 框架升级更新 开发者社区建设如火如荼
  20. 表示所有字符的正则表达式html,JavaScript正则表达式介绍

热门文章

  1. Python 之父谈 Python
  2. Asp.Net SignalR 集线器不使用代理的实现
  3. Linux定时任务Crontab执行PHP脚本
  4. struts2注解(转)
  5. 解决新配置虚拟主机不生效的问题
  6. web.config配置文件详解
  7. python学会了可以做什么菜_python学习之路(24)
  8. python中如何创建包_如何在Python中创建命名空间包?
  9. final修饰的变量是引用不能改变还是引用的对象不能改变
  10. python基本概念关系图_Python基本概念