Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-为什么我的插入速度这么慢?_Java_Mysql - Fatal编程技术网

Java-为什么我的插入速度这么慢?

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

不知怎的,我的MySQL插入非常慢。即使我使用“批量插入”。大约50个插件需要2000毫秒。。这是正常的还是有办法改进我的代码

            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和更新索引,这会大大降低插入速度。现在速度非常快。非常感谢你!