免责声明:本页面内容均来源于鼡户站内编辑发布部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性如涉及版权等问题,请立即联系客服进荇更改或删除保证您的合法权益。
过程插入更新的3种方法:
a、逐条檢查插入或更新同时执行插入或更新
b、逐条merge into(逐条是为了记录过程日志与错误信息)
c、基于关联数组的检查插入、更新,通过forall批量sql执行
1、创建模拟大表数据量1亿不分区
说明:用connect by方法创建测试大表相对较快
2、给大表加上一个主键,因为插入更新基于主键
3、创建模拟的更新表数据量20万
4、给更新表加数据,10万更新10万插入,写的相对烦人些。代码不贴出来了
6、第一种方法的过程如下:
begin--当前数据执行插入哽行判断 i / 2, --此处插入数量不必在意8、forall方法,结合第一种方法的判断方式:
--此循环功能:判断是否存在目标表中 --清空当前循环插入、更新缓存表数据(不清空下次循环重复执行)最后结果:同样对一亿的表插入更新20万条数据,多次执行平均时间
从每5000条提交一次的时间可以得出来,forall最稳定其次merge稍有起伏,手动执行插入更新浮动最大从0.3秒到6.9秒不等
效率方面:forall优势明显,其次merge也不差手动插入更新最慢且不稳定
代碼方面:merge into与手动插入更新 相对简洁,forall就比较复杂
扩展性:手动插入更新可以加上许多业务性功能forall方式目前oracle也提供了相当多的函数用于数據处理,所以次之merge into就个人而言,相对笨重一些了