MySQL更新正在进行中

eve*_*ean 5 java mysql performance

嘿,我试图将大约600000个令牌包含到我的MySQL数据库表中.我正在使用的引擎是InnoDB.更新过程将永远持续下去:(.所以我最好的猜测是我在代码中完全遗漏了一些东西,而我所做的只是简单的愚蠢.

也许有人对我的表现有什么看法有一个自发的想法:

这是我的代码:

public void writeTokens(Collection<Token> tokens){

    try{
        PreparedStatement updateToken = dbConnection.prepareStatement("UPDATE tokens SET `idTag`=?, `Value`=?, `Count`=?, `Frequency`=? WHERE `idToken`=?;");

        for (Token token : tokens) {

            updateToken.setInt(1, 0);
            updateToken.setString(2, token.getWord());
            updateToken.setInt(3, token.getCount());
            updateToken.setInt(4, token.getFrequency());
            updateToken.setInt(5, token.getNounID());

            updateToken.executeUpdate();
        }
    }catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Chr*_*ald 5

我没有针对您的Java特定答案,而是将整个shebang包装在一个事务中.如果不这样做,则MySQL(在针对InnoDB写入时)启动并为每个更新语句提交一个新事务.

只需START TRANSACTION在开始调用之前执行,并在COMMIT完成所有更新/插入后执行.我还认为MySQL推迟了索引更新,直到事务结束,如果你要更新索引字段,这应该有助于提高性能.