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(クエリ);

    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 などの小さな行を 1 行でこのプロセスを実行します。

テーブル 1 セット結果 = 3 キー DESC 制限 10000 による順序を更新します。

最初の 10000 行を取得し、それらのすべての結果セルを変更します。これには約24秒かかりました。今回は、10000行でthemnを試したときの他のテストに非常に近いです。

次に、カーソルを使用してこのプロセスを実行しようとしました。10000 行の更新にかかった時間はわずか 4 秒でした。

結果は興味深いものです。

しかし、jdbc を使用してそれらを更新したいと考えています。それを行う他の方法はありますか?そして、なぜカーソルが速すぎるのですか?

4

0 に答える 0