0

私はSQL(postgreSQLを使用)が初めてで、大きなテーブルから選択していくつかの機能を実行するJavaプログラムを作成しました。問題は、プログラムを実行すると、テーブルが大きすぎるために Java OutOfMemoryError が発生することです。LIMIT 演算子を使用してテーブルの先頭から選択できることはわかっていますが、LIMIT コマンドで中断した特定のインデックスから選択を開始する方法はありますか? ありがとう!

4

3 に答える 3

2

Postgres には、次のようなオフセット オプションがあります。

select from table
offset 50
limit 50
于 2013-07-22T18:55:28.617 に答える
0

これは実際には、jdbc ドライバーが透過的に処理するものです。一度にすべてをメモリにロードする代わりに、結果セットを実際にストリーミングできます。MySQL でこれを行うには、次の手順に従う必要があります: http://javaquirks.blogspot.com/2007/12/mysql-streaming-result-set.html

基本的に、作成時に connection.prepareStatement を呼び出し、2 番目と 3 番目のパラメーターとしてResultSet.TYPE_FORWARD_ONLYandを渡す必要があります。次に、PreparedStatement オブジェクトを呼び出します。ResultSet.CONCUR_READ_ONLYsetFetchSize(Integer.MIN_VALUE)

必要に応じて反復できる他のデータベースでこれを行うための同様の手順があります。

編集: PostgreSQL の手順が必要であることがわかりました。こちらの指示に従ってください:巨大なテーブルからすべての行を読み取るには?

于 2013-07-22T18:45:02.937 に答える
0

mysql の場合、次のアプローチを使用できます。

  1. SELECT * FROM table LIMIT {offset}, row_count
  2. SELECT * FROM テーブル WHERE id > {max_id_from_the previous_selection} LIMIT row_count. 最初の max_id_from_the previous_selection = 0。
于 2013-07-22T18:39:35.203 に答える