我试图在MSSQL中通过jdbc连接批量插入10K记录,批量插入需要大约18到20秒。我想在不到3秒的时间内插入。有没有办法快速插入。
我的代码在下面给出
public void BatchInsert() {
PreparedStatement pStmnt = null;
try {
final int batchSize = 1000;
int count = 0;
Connection con = createConnection();
long end = System.currentTimeMillis();
System.out.println("connection creation time :: " + (end - start));
start = System.currentTimeMillis();
pStmnt = con.prepareStatement("insert into testtable values(?)");
for (int i = 1; i <= 10000; i++) {
pStmnt.setInt(1, i);
pStmnt.addBatch();
if (++count % batchSize == 0) {
pStmnt.executeBatch();
}
}
pStmnt.executeBatch(); // insert remaining records
end = System.currentTimeMillis();
System.out.println("total insert time :: " + (end - start));
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pStmnt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
提前感谢您的帮助。
答案 0 :(得分:0)
到目前为止,我认为您在数据库表中使用了更多索引。这就是为什么花费更多时间的原因。因此,在插入案例时,首先需要以某种方式停止索引(可能删除并重新创建或删除不必要的索引)。
出于操作目的,您可以从testtable
删除所有索引并运行批处理。希望您的插入时间最短。
信用转到@RBarryYoung
答案 1 :(得分:0)
如果您的连接默认为AutoCommit模式,那么您可以通过
获得性能方面的显着改善con.setAutoCommit(false);
在进入addBatch
循环之前,然后执行
con.commit();
在最终executeBatch
之后。