【问题标题】:ResultSet - Cursor : rs.next() Taking lot of time结果集 - 光标:rs.next() 花费大量时间
【发布时间】:2012-04-22 13:43:42
【问题描述】:

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

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

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

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

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

可以做什么?

【问题讨论】:

    标签: java oracle jdbc


    【解决方案1】:

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

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

    statement.setFetchSize(100);
    

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

    【讨论】:

      【解决方案2】:

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

      因此,显然每次都需要花费一些时间去数据库并在每次 while 循环迭代中获取超过 1500 次的单个记录。

      【讨论】:

      • 很好的解释。
      猜你喜欢
      • 2019-10-25
      • 2018-01-10
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2023-03-11
      • 2016-06-21
      • 2016-01-31
      相关资源
      最近更新 更多