13

Вопрос по java – ResultSet - Cursor: rs.next () отнимает много времени

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

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

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

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

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

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

2ответа

19

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

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

statement.setFetchSize(100);

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

5

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

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

RelatedQuestions