结果集 - 游标 : rs.next() 花费大量时间

2022-09-03 18:09:51

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

但是当我使用此游标具有超过1500行的游标来读取行时

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

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

只需简单地横移每行光标,就需要超过40秒(40000毫秒)

我们能做些什么?


答案 1

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

您所要做的就是通过设置为..例如 100fetchSize

statement.setFetchSize(100);

您可以根据自己的环境使用这个数字来提高性能。


答案 2

中有超过 1500 行,数据库返回的 rs 只是对该游标的引用。因此,当您调用rs.next()时,每次它都会转到数据库cursr并获取游标指针指向的当前记录。

因此,显然每次进入数据库并获取单个记录超过1500次每次循环迭代都需要一些时间。


推荐