日期:2014-05-20  浏览次数:20799 次

大牛们,帮俺解决个问题:20万的数据要插入到另一个库里,怎么效率比较高
我的A库有20多万数据,通过1个主表4个从表的基表分别按类型做成了6对主从(一对一)视图,
然后通过这6对主从视图分别插入到我的另一个B库(6对主从表)里。
在插入的同时要校验,并将错误的数据插入到另一张error的表里。



请问,怎么处理效率会更快一点儿。框架用的hibernate+struts




------解决方案--------------------
oracle的话
insert /*+ append */ into table select ... from othertable
在非归档模式下使用这种直接路径insert可以提高性能,高水准线插入,不生成undo以及生成少量的redo
在归档模式下要求你的表是nologging,才可以使用该语句减少redo

最好建立触发器,判断插入是否成功,不成功的话,在触发器里使用自治事务提交到error表
------解决方案--------------------
除非厂方提供的JDBC实现中的确支持批量处理 否则PrepareStatement.addBatch();的实现其实就是一行一行往里插入..

...想要真正意义的效率高 你可以去看看sqlldr...
------解决方案--------------------
写一个存储过程外面传一个集合参数,过程里再拼写高效的sql
------解决方案--------------------
我记得,我曾经也是这两个框架,刚开始用Hibernate一条一条的插入,但是太慢了,我也有几十万的数据,到一定数据量时,就会内存溢出,后来改成Hibernate中的JDBC批量插入,快很多了,插入100万都没事。。
我觉得,楼主可以考虑。。
------解决方案--------------------
可以试试分批的批量插入,把你获取的数据集分批次的汇总插入。

比如100万的数据,分次几次获取,然后批量插入。。。

嘿嘿,程序有的跟不上的,让公司给弄个好的服务器。。