ResultSet - Cursor:rs.next()花费大量时间

far*_*raz 14 java oracle jdbc

我有一个从数据库返回的游标执行31毫秒(毫秒).

但是当我使用这个超过1500行的游标来获取行时

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

  while(rs.next()){
     system.out.println("...");
  }
Run Code Online (Sandbox Code Playgroud)

只需简单地横穿光标的每一行,它需要超过40秒(40000毫秒)

可以做些什么?

Mik*_*378 22

实际上,默认情况下,JDBC使用10的提取大小.
因此,如果您没有设置更大的值,您将为下一个记录调用数据库正好150次......,无需解释往返的缺点.

您所要做的就是通过设置fetchSize100来测试性能,例如:

statement.setFetchSize(100);
Run Code Online (Sandbox Code Playgroud)

您可以使用此号码来根据您的环境提高性能.


Cha*_*har 6

游标中有超过1500行,数据库返回的rs只是对该游标的引用.所以当你调用rs.next()时,每次进入数据库cursr并获取光标指针指向的当前记录.

所以很明显,每次进入数据库都需要一些时间,并且每次循环迭代都会获取超过1500次的单个记录.