insert into select from 比 for loop循环效率高吗?

孙大诚_SunRobin 2016-10-24 01:33:57
这里有个需求,是把从一个联合查询中取得的select结果集放到一个表中,我写的是通过循环实现。

for x in select... loop
insert into T values(x.Name...)...
end loop;


还有一种方式是直接inset into T select from...

请问这两种方法在效率上有什么区别吗?

...全文
606 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxq129601 2016-10-25
  • 打赏
  • 举报
回复
第1种就是简单,数据量不大的话可以使用 第2种比较稳妥,自由控制
mayanzs 2016-10-25
  • 打赏
  • 举报
回复
仅从效率上来讲,个人感觉第二种为快,有点像是整体打包后一次性存入,减少了交互。
sych888 2016-10-25
  • 打赏
  • 举报
回复
第二种方法可以加上HINT参数 APPEND、PARALLEL 但是数据量很大的话,可能需要比较大的UNDO空间
卖水果的net 2016-10-25
  • 打赏
  • 举报
回复 1
引用 6 楼 sundacheng1989 的回复:
请教一下,第二种方法,也就是insert into... select的方式,为什么比单个的插入更加快呢?
去银行存 10000 块钱, 每次存一张,银行都要给你打一个单子,给你的账户加 100 ; 所有的动作都要 100 次; 如果一次性存了 100 张,只是点钱的动作做了 100 次,其他的动作,只做一次就够了;
孙大诚_SunRobin 2016-10-25
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
不要使用第一种方法,这个太慢了了。 第二种方法,哪果数据量不大的话,可以考虑使用分批提交,比如 10000 行 commit 一次; PS: 楼主可以研究一下 forall 的用法,可能会更适合你;
请教一下,第二种方法,也就是insert into... select的方式,为什么比单个的插入更加快呢?
卖水果的net 2016-10-24
  • 打赏
  • 举报
回复
不要使用第一种方法,这个太慢了了。 第二种方法,哪果数据量不大的话,可以考虑使用分批提交,比如 10000 行 commit 一次; PS: 楼主可以研究一下 forall 的用法,可能会更适合你;
sych888 2016-10-24
  • 打赏
  • 举报
回复
导入记录有多大?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧