Есть ли способ оптимизировать его?
Если вы хотите сделать это быстрее, вы можете выполнить массовый экспорт и загрузить из файла. Или просто не использовать базу данных;)
Вы можете пойти намного быстрее с другими подходами к хранению данных. Вы можете добиться такой производительности с базой данных, но иногда самые простые подходы являются лучшими.
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.