लाखों अभिलेखों के साथ SQLite में कुशल पेजिंग


102

मुझे सूची दृश्य में SQLite परिणाम दिखाने की आवश्यकता है। बेशक, मुझे परिणाम पृष्ठ करने की आवश्यकता है।

पहला विकल्प लिमिट क्लॉज का उपयोग करना है। उदाहरण के लिए:

SELECT * FROM Table LIMIT 100, 5000

यह 5001 से 5100 तक के रिकॉर्ड देता है। समस्या यह है कि आंतरिक रूप से SQLite पहले 5000 रिकॉर्ड "पढ़ता है" और यह बहुत कुशल नहीं है।

बहुत सारे रिकॉर्ड होने पर पेजिंग के लिए सबसे अच्छा तरीका क्या है?

जवाबों:


118

कृपया ध्यान दें कि आपको हमेशा एक ORDER BYखंड का उपयोग करना होगा ; अन्यथा, आदेश मनमाना है।

कुशल पेजिंग करने के लिए, ऑर्डर किए गए फ़ील्ड के पहले / अंतिम प्रदर्शित मूल्यों को सहेजें, और अगले पृष्ठ को प्रदर्शित करते समय उनके बाद जारी रखें:

SELECT *
FROM MyTable
WHERE SomeColumn > LastValue
ORDER BY SomeColumn
LIMIT 100;

(यह SQLite विकी पर अधिक विस्तार के साथ समझाया गया है ।)

जब आपके पास कई तरह के कॉलम हों (और SQLite 3.15 या बाद में), तो आप इसके लिए एक पंक्ति मान का उपयोग कर सकते हैं :

SELECT *
FROM MyTable
WHERE (SomeColumn, OtherColumn) > (LastSome, LastOther)
ORDER BY SomeColumn, OtherColumn
LIMIT 100;

8
ऐसे मामले के बारे में जहां आपके पास 101 समरूपता में 101 समान मूल्य हैं? यह बेहतर प्रतीत होता है: blog.ssokolow.com/archives/2009/12/23/…
Jacek zawrynowicz

6
@ Jacekingawrynowicz यदि सॉर्टिंग कॉलम अद्वितीय नहीं है, तो आपको अधिक कॉलम द्वारा सॉर्ट करने की आवश्यकता है। वैसे भी, यदि आपके पास एक वैकल्पिक उत्तर है, तो एक उत्तर बनाएं।
सीएल।

@ अगर मैं यह करना चाहता हूं कि ज्वाइन क्वेरी के साथ कई और शर्तों के साथ कैसे करें
YLS

@YLS आजकल, आप पंक्ति मूल्यों का उपयोग कर सकते हैं।
सीएल।

2
इस दृष्टिकोण का उपयोग करने वाली समस्या को संक्षेप में इस टिप्पणी
mr5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.