我从数据库返回的游标在31毫秒(毫秒)内执行。
但是当我使用这个超过1500行的游标来获取行
时 ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
只需简单地横穿光标的每一行就需要超过40秒(40000毫秒)
可以做些什么?
答案 0 :(得分:21)
实际上,默认情况下,JDBC使用10的提取大小 因此,如果你没有设置更大的值,你将为下一个记录调用数据库正好150次......,不需要解释往返的缺点。
您所要做的就是通过将fetchSize
设置为.. 100 来测试效果,例如:
statement.setFetchSize(100);
您可以根据自己的环境使用此号码来提高效果。
答案 1 :(得分:5)
您的游标中有超过1500行,而 rs 数据库返回的内容只是对该游标的引用。因此,当您调用 rs.next()时,每次进入数据库cursr并获取光标指针指向的当前记录。
显然,每次进入数据库都需要一些时间,并且每次循环迭代都会获取超过1500次的单个记录。