SELECT * FROM table ORDER BY column
Tidak ada alasan untuk menyedot seluruh tabel ke dalam RAM. Cukup buka kursor dan mulai membaca. Anda dapat memainkan game dengan ukuran pengambilan dan yang tidak, tetapi DB akan dengan senang hati mempertahankan tempatnya saat Anda memproses baris.
Tambahan:
Oke, jika Anda menggunakan Java, saya tahu apa masalah Anda.
Pertama, hanya dengan menggunakan Java, Anda menggunakan kursor. Pada dasarnya itulah ResultSet di Jawa. Beberapa ResultSet lebih fleksibel daripada yang lain, tetapi 99% di antaranya sederhana, hanya meneruskan ResultSet yang Anda panggil 'berikutnya' untuk mendapatkan setiap baris.
Sekarang untuk masalah Anda.
Masalahnya khusus dengan driver Postgres JDBC. Saya tidak tahu mengapa mereka melakukan ini, mungkin spesifikasinya, mungkin itu sesuatu yang lain, tetapi terlepas dari itu, Postgres memiliki karakteristik yang aneh bahwa jika Koneksi Anda memiliki autoCommit yang disetel ke true, maka Postgres memutuskan untuk menyedot seluruh hasil yang ditetapkan pada salah satu mengeksekusi metode atau metode pertama berikutnya. Tidak terlalu penting di mana, hanya saja jika Anda memiliki trilyun baris, Anda mendapatkan pengecualian OOM yang bagus. Tidak membantu.
Ini dapat dengan mudah menjadi apa yang Anda lihat, dan saya menghargai bagaimana hal itu bisa sangat membuat frustrasi dan membingungkan.
Sebagian besar Koneksi default ke autoCommit =true. Sebagai gantinya, cukup setel autoCommit ke false.
Connection con = ...get Connection...
con.setAutoCommit(false);
PreparedStatement ps = con.prepareStatement("SELECT * FROM table ORDER BY columm");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
String col1 = rs.getString(1);
...and away you go here...
}
rs.close();
ps.close();
con.close();
Perhatikan kurangnya penanganan pengecualian, dibiarkan sebagai latihan untuk pembaca.
Jika Anda ingin lebih mengontrol berapa banyak baris yang diambil sekaligus ke dalam memori, Anda dapat menggunakan:
ps.setFetchSize(numberOfRowsToFetch);
Bermain-main dengan itu dapat meningkatkan kinerja Anda.
Pastikan Anda memiliki indeks yang sesuai pada kolom yang Anda gunakan di ORDER BY jika Anda peduli dengan pengurutan sama sekali.