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的学生

印刷

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