データベースから返されたカーソルが 31ms (ミリ秒) で実行されます。
しかし、行をフェッチするために1500行を超える行を持つこのカーソルを使用すると
ResultSet rs = (ResultSet)cstm.getObject(6);
while(rs.next()){
system.out.println("...");
}
カーソルの各行を単純に横切るだけで、40秒(40000ミリ秒)以上かかります
何ができるでしょうか?
実際、デフォルトでは、JDBC は 10 のフェッチ サイズを使用します。
したがって、より大きな値を設定しない場合、次のレコードのためにデータベースを正確に 150 回呼び出すことになります ...、往復の欠点を説明する必要はありません。
たとえばfetchSize
、.. 100に設定してパフォーマンスをテストするだけです。
statement.setFetchSize(100);
この数値を使用して、環境に応じてパフォーマンスを向上させることができます。
カーソルに 1500 を超える行があり、データベースから返されるrsはそのカーソルへの単なる参照です。したがって、rs.next()を呼び出すと、データベース cursr に移動するたびに、カーソル ポインターが指す現在のレコードが取得されます。
そのため、毎回データベースに移動し、while ループの反復ごとに 1500 回を超える単一のレコードをフェッチするには、明らかに時間がかかります。