0

我正在尝试使用 jdbc 提高 UPDATE 的速度。有 300000 行,我想将每行的 X 列更改为 5。但我需要根据它们的主键对它们进行排序。因为有 400000 行,我想从顶部更改 300000 行。

这是我到目前为止所做的:

首先,我尝试在使用准备好的语句创建每个查询时发送它

    long time = System.currentTimeMillis();
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date (time)));

    for(int i=number-1; i>=0; i--){
        try{
            pStmt.setInt(1, (int) hashMap.get(i));
            time = System.currentTimeMillis();
            result = pStmt.executeUpdate();
            time = System.currentTimeMillis() - time;
            totalTime += time;
        }catch(Exception e){}
    }

    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date (System.currentTimeMillis())));
    time = System.currentTimeMillis() - time;

但是花了很多时间。大约 900 秒。

然后我尝试使用 addBatch() 将它们添加到批处理中

java.sql.PreparedStatement pStmt2 = conn.prepareStatement(query);

    for(int i=0; i<number; i++){
            pStmt2.setInt(1, (int) hashMap.get(i));
            pStmt2.addBatch();
    }

    long time = System.currentTimeMillis();
    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date (time)));

    pStmt2.executeBatch();

    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date (System.currentTimeMillis())));
    time = System.currentTimeMillis() - time;

它更好,但没有那么好。只有50秒。区别。

我试图执行块。这意味着:有 300000 行,每 30000 行我将查询添加到批处理中,然后执行它们。我这样做了 10 次。

它好多了,但还是太慢了。大约 800 秒

然后我想在一行中用小行(例如 10000)执行此过程:

通过键 DESC 限制 10000 更新 table1 设置结果 = 3 顺序。

这需要前 10000 行,并更改它们的每个结果单元格。这花了大约 24 秒。当我尝试 10000 行时,这一次与其他测试非常接近。

然后我尝试使用游标来完成这个过程。更新 10000 行只用了 4 秒。

结果很有趣。

但我想使用 jdbc 更新它们。还有其他方法吗?为什么光标速度太快?

4

0 回答 0