结果集 - 光标:rs.next()以大量的时间(ResultSet - Cursor : rs.n

2019-07-28 21:32发布

我有一个从数据库返回的光标在31毫秒(毫秒)执行。

但是,当我使用这个游标有1500个多行来获取行

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

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

通过游标中的每一行只是简单的横移它采取超过40秒(40000毫秒)

可以做些什么?

Answer 1:

事实上,在默认情况下JDBC使用10获取大小。
因此,如果您没有设置一个更大的价值,你会打电话给数据库记录旁边正好150倍......,没有必要解释往返的缺点。

所有你需要做的就是通过设置来测试性能fetchSize例如为了.. 100:

statement.setFetchSize(100);

你可以用这个号码打根据你的环境在改善性能。



Answer 2:

你在你的光标 1500个多行,什么是数据库返回的RS只是到该游标的引用。 所以,当你调用rs.next(),每次它进入数据库cursr,让你光标指针指向当前记录。

所以,很显然这将需要一些时间去数据库中的每个时间,并获取与每一个while循环迭代超过1500次的单个记录。



文章来源: ResultSet - Cursor : rs.next() Taking lot of time
标签: java oracle jdbc