0

私はテーブルを持っており、そこから約 250,000 レコードのレコードをフェッチしています。これには約 25 分かかります。フェッチ時間を短縮する方法はありますか。以下のようなコードを使用しています:-

query.setParameterList("studentId", StudentIdList);

それを最適化する方法はありますか?

4

2 に答える 2

4

SQL コマンド ラインで 10 分未満、Hibernate で 25 分以上かかる場合は、バッチ処理に関する情報を調べてください。特に、ステートレス セッションの恩恵を受ける可能性があります (特に、多くの作業を行っていない場合)。本当に多くの作業を行っていない場合は、DML ステートメントを (その URL でも) 使用できる場合があります。

于 2011-06-10T11:37:44.137 に答える
-1

それを最適化する方法はありますか?

高速化したい場合は、一括エクスポートを実行してファイルからロードできます。または、データベースを使用しないでください;)

データを保存する他のアプローチを使用すると、はるかに高速に処理できます。データベースでこのようなパフォーマンスが得られる場合もありますが、最も単純なアプローチが最適な場合もあります。

public static void main(String... args) throws IOException {
    File file = new File("students.csv");

    PrintWriter pw = new PrintWriter(file);
    for (int i = 0; i < 250 * 1000; i++)
        pw.println("student " + i + ", last " + i + ", email.address" + i + "@my-school.com," + i);
    pw.close();

    long start = System.nanoTime();
    BufferedReader br = new BufferedReader(new FileReader(file));
    List<Student> students = new ArrayList<Student>();
    for (String line; ((line = br.readLine()) != null);) {
        int pos = line.indexOf(',');
        int pos2 = line.indexOf(',', pos + 1);
        int pos3 = line.indexOf(',', pos2 + 1);
        students.add(new Student(line.substring(0, pos), line.substring(pos + 1, pos2), line.substring(pos2 + 1, pos3), Integer.parseInt(line.substring(pos3 + 1))));
    }
    br.close();
    long time = System.nanoTime() - start;
    System.out.printf("Time to load %,d students was %.1f ms.%n", students.size(), time / 1e6);
}

http://introcs.cs.princeton.edu/java/32class/Student.java.htmlの Student を使用しました

版画

Time to load 250,000 students was 228.7 ms.
于 2011-06-10T12:28:31.347 に答える