2012-04-10 83 views
11

我有一个从数据库返回的游标,执行时间为31毫秒(毫秒)。ResultSet - 光标:rs.next()花费很多时间

但是,当我使用具有超过1500行此游标来获取行

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

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

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

有什么可以做了什么?

回答

16

事实上,在默认情况下JDBC使用这样获取的10大小,如果不设置为一个较大的值,你可以调用数据库中记录的旁边正好150倍......

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

statement.setFetchSize(100); 

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

+0

感谢它的工作..相反,我用ResultSet.setFetchSize(100)... – faraz 2012-04-10 09:42:44

+0

伟大:) 100应该是好的 – Mik378 2012-04-10 09:44:48

+0

谢谢Mik378,你让我的一天... !!! – 2013-10-01 17:49:37

4

你有你的光标超过1500行和RS什么是数据库返回只是到该游标的引用。因此,当您调用rs.next()时,每次它进入数据库cursr并获取光标指针指向的当前记录。

所以很显然,每次访问数据库都需要一些时间,并且每次循环迭代获取单个记录的次数超过1500次。

+0

很好的解释。 – Deepak 2017-04-29 08:48:31