我有一个场景,我需要使用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次迭代/小时。 我感觉太慢了 你还有什么更好的方法可以改进吗?
答案 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.在逻辑点提交并休息回滚。