SELECT * FROM table ORDER BY column
संपूर्ण तालिका को RAM में चूसने का कोई कारण नहीं है। बस एक कर्सर खोलें और पढ़ना शुरू करें। आप फ़ेच साइज़ के साथ गेम खेल सकते हैं और क्या नहीं, लेकिन जब आप अपनी पंक्तियों को संसाधित करते हैं तो डीबी खुशी से अपनी जगह बनाए रखेगा।
परिशिष्ट:
ठीक है, अगर आप जावा का उपयोग कर रहे हैं तो मुझे आपकी समस्या के बारे में अच्छी जानकारी है।
सबसे पहले, केवल जावा का उपयोग करके, आप एक कर्सर का उपयोग कर रहे हैं। यह मूल रूप से जावा में एक परिणामसेट है। कुछ परिणामसेट दूसरों की तुलना में अधिक लचीले होते हैं, लेकिन उनमें से 99% सरल होते हैं, केवल परिणामसेट को अग्रेषित करें जिन्हें आप प्रत्येक पंक्ति प्राप्त करने के लिए 'अगला' कहते हैं।
अब आपकी समस्या के बारे में।
समस्या विशेष रूप से Postgres JDBC ड्राइवर के साथ है। मुझे नहीं पता कि वे ऐसा क्यों करते हैं, शायद यह कल्पना है, शायद यह कुछ और है, लेकिन इसकी परवाह किए बिना, पोस्टग्रेज़ की जिज्ञासु विशेषता है कि यदि आपके कनेक्शन में ऑटोकॉमिट सही पर सेट है, तो पोस्टग्रेज़ या तो सेट किए गए पूरे परिणाम में चूसने का फैसला करता है निष्पादन विधि या पहली अगली विधि। वास्तव में महत्वपूर्ण नहीं है कि कहां, केवल यदि आपके पास गजियन पंक्तियां हैं, तो आपको एक अच्छा ओओएम अपवाद मिलता है। मददगार नहीं है।
यह वही हो सकता है जो आप देख रहे हैं, और मैं इसकी सराहना करता हूं कि यह कितना निराशाजनक और भ्रमित करने वाला हो सकता है।
ऑटोकॉमिट =सत्य के लिए अधिकांश कनेक्शन डिफ़ॉल्ट। इसके बजाय, बस autoCommit को गलत पर सेट करें।
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();
पाठक के लिए एक अभ्यास के रूप में छोड़े गए अपवाद से निपटने की स्पष्ट कमी पर ध्यान दें।
यदि आप मेमोरी में एक बार में कितनी पंक्तियाँ लाई जाती हैं, इस पर अधिक नियंत्रण चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
ps.setFetchSize(numberOfRowsToFetch);
इसके साथ खेलने से आपका प्रदर्शन बेहतर हो सकता है।
सुनिश्चित करें कि आपके पास ORDER BY में उपयोग किए जाने वाले कॉलम पर एक उपयुक्त अनुक्रमणिका है यदि आप अनुक्रमण के बारे में बिल्कुल भी परवाह करते हैं।