Java-为什么我的插入速度这么慢?
不知怎的,我的MySQL插入非常慢。即使我使用“批量插入”。大约50个插件需要2000毫秒。。这是正常的还是有办法改进我的代码Java-为什么我的插入速度这么慢?,java,mysql,Java,Mysql,不知怎的,我的MySQL插入非常慢。即使我使用“批量插入”。大约50个插件需要2000毫秒。。这是正常的还是有办法改进我的代码 String sql = "INSERT INTO wlw ( wlw_level, wlw_name, wlw_url, wlw_processing, wlw_finished, wlw_source )" + "VALUES(?, ?, ?, ?, ?, ?)"; Pr
String sql = "INSERT INTO wlw ( wlw_level, wlw_name, wlw_url, wlw_processing, wlw_finished, wlw_source )"
+ "VALUES(?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
for(QueryStore qs : QueryStore) {
preparedStatement.setInt(1, qs.level);
preparedStatement.setString(2, qs.anchor);
preparedStatement.setString(3, qs.url);
preparedStatement.setInt(4, qs.processing);
preparedStatement.setInt(5, qs.finished);
preparedStatement.setLong(6, qs.id);
preparedStatement.addBatch();
System.out.println("Adding URL: " + qs.url);
}
System.out.println("Start saving ...");
long then = System.currentTimeMillis();
preparedStatement.executeBatch();
long now = then - System.currentTimeMillis();
System.out.println("SAVING END - Took me " + now + "ms");
谢谢你的建议 尝试将
rewriteBatchedStatements=true
添加到连接参数中 一个可能的optim。未使用语句。返回生成的\u键
,因为您不使用返回的生成键。它是innoDB表?您是在使用连接池还是在每次调用执行插入操作的方法时手动创建连接?您的表在insert时是否有触发器,或者是否有表的监视器?您要插入多少数据?您的表管理多少个索引?它使用了很多外键吗?@Khalil是的,这是个问题吗?@Crayl我认为这是个问题,因为当你在InnoDB表中插入一行时,InnoDB引擎会为该行构建pk和更新索引,这会大大降低插入速度。现在速度非常快。非常感谢你!