bitscn.com
mysql fetch size相关问题
默认情况下,mysql的jdbc驱动会一下子把所有row都读取下来,这在一般情况下是最优 的,因为可以减少client-server的通信开销。但是这样也有一个问题,当数据库查询结 果很大时,特别当不能全部放进内存时,就会产生性能问题。 本来,jdbc api里在connection、statement和resultset上都有设置fetchsize的方法, 但是mysql的jdbc驱动都不支持,无论你怎么设fetchsize,resultset都会一次性从serv er读取数据。在mysql的官方论坛上也有多个这样的问题,总结一下解决办法如下:
1.mysql版本在5.0以上,mysql的jdbc驱动更新到最新版本(至少5.0以上)
2.statement一定是type_forward_only的,并发级别是concur_read_only(即创建statem ent的默认参数)
3.以下两句语句选一即可:
1).statement.setfetchsize(integer.min_value);
2).((com.mysql.jdbc.statement)stat).enablestreamingresults(); 这样会一行一行地从server读取数据,因此通信开销很大,但内存问题可以解决。
官方 的说法是不支持fetchsize不是mysql的jdbc驱动的问题,而是mysql本身就不支持。而商 用数据库oracle或db2都是支持fetchsize的,从这里也可以看出两者的考量不同。
bitscn.com