我有一个从数据库返回的游标,执行时间为31毫秒(毫秒)。ResultSet - 光标:rs.next()花费很多时间
但是,当我使用具有超过1500行此游标来获取行
ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
只是简单的横移通过游标中的每一行它采取超过40秒(40000毫秒)
有什么可以做了什么?
我有一个从数据库返回的游标,执行时间为31毫秒(毫秒)。ResultSet - 光标:rs.next()花费很多时间
但是,当我使用具有超过1500行此游标来获取行
ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
只是简单的横移通过游标中的每一行它采取超过40秒(40000毫秒)
有什么可以做了什么?
事实上,在默认情况下JDBC使用这样获取的10大小,如果不设置为一个较大的值,你可以调用数据库中记录的旁边正好150倍......
所有你需要做的通过将fetchSize设置为.. 100来测试性能:例如:
statement.setFetchSize(100);
您可以使用此数字来玩,以根据您的环境提高性能。
你有你的光标超过1500行和RS什么是数据库返回只是到该游标的引用。因此,当您调用rs.next()时,每次它进入数据库cursr并获取光标指针指向的当前记录。
所以很显然,每次访问数据库都需要一些时间,并且每次循环迭代获取单个记录的次数超过1500次。
很好的解释。 – Deepak 2017-04-29 08:48:31
感谢它的工作..相反,我用ResultSet.setFetchSize(100)... – faraz 2012-04-10 09:42:44
伟大:) 100应该是好的 – Mik378 2012-04-10 09:44:48
谢谢Mik378,你让我的一天... !!! – 2013-10-01 17:49:37