MySQL JDBCのsetFetchSize



通常、MySQLのJDBCではsetFetchSize()メソッドの設定はサポートされておらず、常に一度にすべてメモリにキャプチャされ、メモリがオーバーフローします.ページング・キャプチャによりメモリ・オーバーヘッドを低減できます.ページングが多すぎると、クエリーの効率が低下します.もちろん、プログラムももっと複雑になります.
 
JDBCが自動的にストリーミング方式でデータをキャプチャできるように、以下のように設定することができる.
 statement.setFetchSize(Integer.MIN_VALUE);

 
ある人はMySQLの1つのBUGだと思って、詳しくは:http://bugs.mysql.com/bug.php?id=18148を参照してください
 
また、JDBCのURLに「useCursorFetch=true」というパラメータを付けてみることもできます.これにより、setFetchSizeで指定した数のデータを一括してキャプチャでき、MySQL 5.0以上のサーバ/connectorのみをサポートできます.このような方法でこの問題を解決することをお勧めします.