从源表批量抽取数据(大约是6000W)如何高效的插入目标表,大师能否简单写一个存储

[复制链接]
查看11 | 回复9 | 2012-5-21 10:19:41 | 显示全部楼层 |阅读模式
从源表批量抽取数据(大约是6000W)如何高效的插入目标表,大师能否简单写一个存储
从源表批量抽取数据(大约是6000W)如何高效的插入目标表,大师能否简单写一个存储?
以下是疑问,请大师帮忙解答
1.游标效率低,如何不使用游标高效的插入目标表(是否分批插入);
2.目标表是否要进行分区,在存储过程的如何实现,需要用exec调用动态SQL;
3.批量插入数据时,什么条件下需要建立临时表;
4.是否需要对目标表建立索引(数据插入后建立索引);
5.大数据批量插入数据优化方案有哪些?

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
把正文贴出来,让想帮助的人方便
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
1.游标效率低,如何不使用游标高效的插入目标表(是否分批插入);
把目标表主键和索引删掉,把表打成nologging,采用insertappend+parallel 目标表select * from 源表
2.目标表是否要进行分区,在存储过程的如何实现,需要用exec调用动态SQL;
要不要分区,要看你的业务,你都没说清楚
3.批量插入数据时,什么条件下需要建立临时表;
业务
4.是否需要对目标表建立索引(数据插入后建立索引);
业务
5.大数据批量插入数据优化方案有哪些?
直接插入法,并行
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
本帖最后由 yulihua49 于 2015-6-16 10:31 编辑
不同意你的说法。游标插入是效率最高的方法。
在RAC环境下,一个线程select源表,批量(我们是1000 - 10000一批)发送到队列。
队列那头是若干线程,各自有数据库连接(这是并行分布到RAC的措施,数量取决于RAC的能力)。
线程打开游标,进行批量数据绑定,插入数据库,commit。。。。
目标数据库可以有主键和若干索引。在有主键时要处理好重码问题(这可能影响点效率)。
其他的,索引对效率的影响并不显著。
还有,不能autocommit,一定要手动成批commit。
再说一句,这个方法的性能,存储过程是绝对追不上的。

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
伸手党?
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
yulihua49 发表于 2015-6-15 09:54
不同意你的说法。游标插入是效率最高的方法。
在RAC环境下,一个线程select源表,批量(我们是1000 - 1000 ...

谢谢你的指点,我整理好代码贴出来在让大师们看看!
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
ETL 工具
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
xxzzycq 发表于 2015-6-18 14:43
ETL 工具

数据量大了,工具的效率就不行了
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
stilllovekk 发表于 2015-6-18 17:15
数据量大了,工具的效率就不行了

kettle是不行,Informatica是很快的,把索引干掉再想办法导入
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
我觉得最好的办法就是 Bulk + limit,将大量数据分批处理,数据量越大,批量处理优势越明显。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行