14

データベースから返されたカーソルが 31ms (ミリ秒) で実行されます。

しかし、行をフェッチするために1500行を超える行を持つこのカーソルを使用すると

  ResultSet rs = (ResultSet)cstm.getObject(6);

  while(rs.next()){
     system.out.println("...");
  }

カーソルの各行を単純に横切るだけで、40秒(40000ミリ秒)以上かかります

何ができるでしょうか?

4

2 に答える 2

23

実際、デフォルトでは、JDBC は 10 のフェッチ サイズを使用します。
したがって、より大きな値を設定しない場合、次のレコードのためにデータベースを正確に 150 回呼び出すことになります ...、往復の欠点を説明する必要はありません。

たとえばfetchSize、.. 100に設定してパフォーマンスをテストするだけです。

statement.setFetchSize(100);

この数値を使用して、環境に応じてパフォーマンスを向上させることができます。

于 2012-04-10T09:13:23.090 に答える
6

カーソルに 1500 を超える行があり、データベースから返されるrsはそのカーソルへの単なる参照です。したがって、rs.next()を呼び出すと、データベース cursr に移動するたびに、カーソル ポインターが指す現在のレコードが取得されます。

そのため、毎回データベースに移動し、while ループの反復ごとに 1500 回を超える単一のレコードをフェッチするには、明らかに時間がかかります。

于 2012-04-10T09:07:57.737 に答える