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