当前位置: 代码迷 >> J2EE >> java遍历结果集 ResultSet.next()结果很慢解决方法
  详细解决方案

java遍历结果集 ResultSet.next()结果很慢解决方法

热度:7843   发布时间:2013-02-25 21:39:02.0
java遍历结果集 ResultSet.next()结果很慢
执行完SQL语句,对结果集遍历发现速度较慢。
代码如下:
ResultSet rs= pmt.execute(SQL);
while(rs.next()){
};
引用:
200万条记录,遍历数据需要30s左右,我想并行加载,并行之后遍历数据需要25s,基本上没有并行效果


这种情况下,基本上是本机的网络IO或数据库的磁盘IO是瓶颈,想要依靠并行等技术来提速,得先确认瓶颈是哪个环节。那也得算算看究竟有多少行数据吧?

代码中简单的next()下,每行数据可都要从数据库端传给程序端的。改进sql,使用分页查询,比如mysql用
limit 0,100 控制返回结果集行数。
db2 用
fetch first 100 rows only 
sqlserver 用 top 100
等。
引用:
200万条记录,遍历数据需要30s左右,我想并行加载,并行之后遍历数据需要25s,基本上没有并行效果

要我觉得吧你这如果是单机普通硬盘的话,这速度真的挺快了,要是要提速,弄成分布式数据库集群,换成SSD,java方面的话估计没什么提升的,纯jdbc了多CPU主机的话,并行机制要能提升效率,主要偏重于CPU密集型操作;
也就是说你的SQL中需要大量的运算,这种情况下可以较好发挥多CPU的优势。

否则你服务器磁盘就那么一块,你就是个顺序读取文件,跟执行copy没啥本质区别,即便有100个CPU,效果差不多就那样。瓶颈基本就在 网络IO 或 磁盘IO 。

你可以把程序直接放在数据库服务器上执行,如果速度大大提升,说明之前瓶颈主要是网络IO;如果速度依然没有提升,说明瓶颈主要是磁盘IO。
  相关解决方案