14

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

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

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

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

只需简单地遍历每一行光标就需要 40 多秒(40000 毫秒)

可以做什么?

4

2 回答 2

23

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

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

statement.setFetchSize(100);

您可以根据您的环境使用此数字来提高性能。

于 2012-04-10T09:13:23.090 回答
6

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

所以很明显,每次while循环迭代都需要一些时间去数据库并获取一条记录超过1500次。

于 2012-04-10T09:07:57.737 回答