在DB中插入100万元组需要很长时间

时间:2017-06-29 13:53:20

标签: java mysql

我有一个场景,我需要使用sql插入100万条目。这花了很长时间。 我有9个表的数据库结构,在每个操作中我都需要执行以下任务。

1. Open Connection
2. Insert tuples in 9 tables with maintaining Primary/foreign key relationship
3. Commit
4. close the connection

重复操作一百万次。

我正在插入800次迭代/小时。 我感觉太慢了 你还有什么更好的方法可以改进吗?

2 个答案:

答案 0 :(得分:1)

尝试通过批量插入(即PreparedStatement)。也许你是单独插入它们。

e.g。

for(int i = 0; i < rows.length; i++){
   // set parameter 1 to rows[i][0]
   preparedStatement.setObject(1, rows[i][0]);
   // set parameter 2 to rows[i][1]
       .
       .
       .
   preparedStatement.addBatch();
   // insert 10k rows
   if(i % 10000 == 0)
       preparedStatement.executeBatch();
}
preparedStatement.executeBatch();

在这种具有外键的情况下,批量首先将数据插入到没有FK的表中。

Why are batch inserts/updates faster? How do batch updates work?

答案 1 :(得分:0)

尝试按照上面的答案中的建议批量运行执行查询。确保在特定数据引发错误的情况下处理回滚策略。

批处理引发错误的不同策略是: 完全回滚 2.在逻辑点提交并休息回滚。