ResultSet - Курсор: rs.next() Принимая много времени

У меня есть курсор, возвращаемый из базы данных в течение 31 мс (миллисекунды).

Но когда я использую этот курсор, содержащий более 1500 строк для выборки строк

  ResultSet rs = (ResultSet)cstm.getObject(6);

  while(rs.next()){
     system.out.println("...");
  }

Простое пересечение каждой строки курсора занимает более 40 секунд (40000 мс)

Что можно сделать?

Ответ 1

Действительно, по умолчанию JDBC использует размер выборки 10. Таким образом, если вы не устанавливаете большее значение, вы вызываете базу данных для следующих записей ровно 150 раз...

Все, что вам нужно сделать, это проверить производительность, установив fetchSize на.. 100, например:

statement.setFetchSize(100);

Вы можете играть с этим номером, чтобы повысить производительность в соответствии с вашей средой.

Ответ 2

у вас более 1500 строк в курсоре, а rs, что возвращается базой данных, - это просто ссылка на этот курсор. Поэтому, когда вы вызываете rs.next(), каждый раз, когда он переходит к базе данных cursr и получает текущую запись, указанную указателем курсора.

Поэтому, очевидно, потребуется некоторое время, чтобы каждый раз обращаться к базе данных и получать одну запись более 1500 раз с каждой итерацией цикла while.