插入select vs bulk插入

时间:2018-01-30 03:10:34

标签: java mysql jdbc

我有一个表A,一天大约400k行,我想写java程序把旧数据备份到另一个表,有两种方法:

  1. 使用jdbc从表A中获取数据,例如一次500行,然后连接像insert into table B values(value1, value2...),(value1, value2...),...这样的sql然后执行。

  2. 使用insert into table B select * from A where,大约2~300万行。

  3. 有人说第二种方式比较慢,但我不确定,哪种方式更好?绝不能崩溃数据库。

1 个答案:

答案 0 :(得分:0)

第一个是现实选项,但你不必通过连接SQL来实现。 Java JDBC已经具有批量发送插入的功能。在for循环中,您可以一次执行一行插入,然后当达到所需的批量大小时,调用executeBatch()将其发布到一个大的批量插入中。

您必须使用的价值是在时间插入多少或批量大小。答案将取决于您的硬件,所以只看看它有效。批量大小越大,任何时候内存中的单位越多。对于非常大的数据库这样做我仍然崩溃了程序但不是数据库。只有当我发现我的系统正确的批量大小时,一切都运行完毕。对我来说5000很好。但是,运行它超过一百万行,数据库很好。但这又取决于数据库。但是你走的是正确的道路。

https://www.tutorialspoint.com/jdbc/jdbc-batch-processing.htm