+ -
当前位置:首页 → 问答吧 → 大牛们,帮俺解决个问题:20万的数据要插入到另一个库里,怎么效率比较高

大牛们,帮俺解决个问题:20万的数据要插入到另一个库里,怎么效率比较高

时间:2011-09-02

来源:互联网

我的A库有20多万数据,通过1个主表4个从表的基表分别按类型做成了6对主从(一对一)视图,
然后通过这6对主从视图分别插入到我的另一个B库(6对主从表)里。
在插入的同时要校验,并将错误的数据插入到另一张error的表里。



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


作者: limile   发布时间: 2011-09-02

PrepareStatement.addBatch();

作者: softroad   发布时间: 2011-09-02

程序插入都不快

要快的需用数据库本身提供的
SYBASE用bcp,ORACLE用dmp/imp

作者: 9441   发布时间: 2011-09-02

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

最好建立触发器,判断插入是否成功,不成功的话,在触发器里使用自治事务提交到error表

作者: viszl   发布时间: 2011-09-02

引用 2 楼 9441 的回复:

程序插入都不快

要快的需用数据库本身提供的
SYBASE用bcp,ORACLE用dmp/imp


oracle 10g之后有expdp/impdp
另外还可以使用外部表和sqlldr
但是这些方式在程序中都不好控制

作者: viszl   发布时间: 2011-09-02

除非厂方提供的JDBC实现中的确支持批量处理 否则PrepareStatement.addBatch();的实现其实就是一行一行往里插入..

...想要真正意义的效率高 你可以去看看sqlldr...

作者: BearKin   发布时间: 2011-09-02

写一个存储过程外面传一个集合参数,过程里再拼写高效的sql

作者: zengxianjunccccccccc   发布时间: 2011-09-02

交给DBA吧 交给DBA吧 交给DBA吧

作者: a276202460   发布时间: 2011-09-02

通过存储过程吧

作者: yashucn   发布时间: 2011-09-02

热门下载

更多