使用jdbc从表A中获取数据,例如一次500行,然后连接像insert into table B values(value1, value2...),(value1, value2...),...
这样的sql然后执行。
使用insert into table B select * from A where
,大约2~300万行。
有人说第二种方式比较慢,但我不确定,哪种方式更好?绝不能崩溃数据库。
答案 0 :(得分:0)
第一个是现实选项,但你不必通过连接SQL来实现。 Java JDBC已经具有批量发送插入的功能。在for循环中,您可以一次执行一行插入,然后当达到所需的批量大小时,调用executeBatch()将其发布到一个大的批量插入中。
您必须使用的价值是在时间插入多少或批量大小。答案将取决于您的硬件,所以只看看它有效。批量大小越大,任何时候内存中的单位越多。对于非常大的数据库这样做我仍然崩溃了程序但不是数据库。只有当我发现我的系统正确的批量大小时,一切都运行完毕。对我来说5000很好。但是,运行它超过一百万行,数据库很好。但这又取决于数据库。但是你走的是正确的道路。
https://www.tutorialspoint.com/jdbc/jdbc-batch-processing.htm