Я использую весеннюю загрузку с данными Spring jpa, hibernate и oracle.
На самом деле, в моей таблице около 10 миллионов записей, мне нужно выполнить некоторые операции, записать информацию в файл и после удаления записи.
Это базовый c sql запрос
select * from zzz where status = 2;
Я провел тест без выполнения операции и удалил запись
long start = System.nanoTime();
int page = 0;
Pageable pageable = PageRequest.of(page, LIMIT);
Page<Billing> pageBilling = billingRepository.findAllByStatus(pageable);
while (true) {
for (Billing: pageBilling .getContent()) {
//process
//write to file
//delete element
}
if (!pageBilling .hasNext()) {
break;
}
pageable = pageBilling .nextPageable();
pageBilling = billingRepository.findAllByStatus(pageable);
}
long end = System.nanoTime();
long microseconds = (end - start) / 1000;
System.out.println(microseconds + " to write");
Результат это плохо, с лимитом 10 000, на это ушло 157 минут, с 100 000 - 28 минут, с миллионами - 19 минут.
Есть ли лучшее решение для увеличения производительности?