我有一张表,我从中获取大约 250,000 条记录的记录,这需要大约 25 分钟,有没有办法减少获取时间。我正在使用如下代码:-
query.setParameterList("studentId", StudentIdList);
有没有办法优化它?
我有一张表,我从中获取大约 250,000 条记录的记录,这需要大约 25 分钟,有没有办法减少获取时间。我正在使用如下代码:-
query.setParameterList("studentId", StudentIdList);
有没有办法优化它?
如果从 SQL 命令行使用不到 10 分钟,从 Hibernate 使用超过 25 分钟,那么您可能需要查看有关批处理的信息。特别是,您可能会从无状态会话中受益(尤其是在您没有做太多工作的情况下)。如果您真的没有做太多工作,您可以使用 DML 语句(也在该 URL 中)。
有没有办法优化它?
如果您想让它更快,您可以进行批量导出并从文件加载。或者只是不使用数据库;)
使用其他存储数据的方法可以更快。使用数据库可能会获得这样的性能,但有时最简单的方法是最好的。
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.