जवाबों:
दो सिंटैक्स फॉर्म थोड़ा भ्रमित करने वाले होते हैं क्योंकि वे संख्याओं को उल्टा करते हैं:
LIMIT <skip>, <count>
के बराबर है:
LIMIT <count> OFFSET <skip>
यह MySQL और PostgreSQL के सिंटैक्स के साथ संगत है। MySQL सिंटैक्स दोनों रूपों का समर्थन करता है, और इसके डॉक्स का दावा है कि OFFSET के साथ दूसरा सिंटैक्स PostgreSQL के साथ संगतता प्रदान करने के लिए था। PostgreSQL डॉक्स यह केवल दूसरे सिंटैक्स का समर्थन करता है, और SQLite के डॉक्स दिखाता है कि यह दोनों का समर्थन करता है, भ्रम से बचने के लिए दूसरे सिंटैक्स की सिफारिश करता है।
वैसे, पहले ORDER BY का उपयोग किए बिना LIMIT का उपयोग करना हमेशा आपके द्वारा दिए गए परिणामों को नहीं दे सकता है। व्यवहार में, SQLite कुछ क्रम में पंक्तियों को वापस कर देगा, शायद यह निर्धारित करके कि वे भौतिक रूप से फ़ाइल में कैसे संग्रहीत हैं। लेकिन इसका मतलब यह नहीं है कि यह आपके इच्छित क्रम में है। एक पूर्वानुमेय आदेश प्राप्त करने का एकमात्र तरीका स्पष्ट रूप से आदेश का उपयोग करना है।
LIMIT <count> OFFSET <skip>
अधिक स्पष्ट है। धन्यवाद।
उत्तरार्द्ध एक चेतावनी के साथ एक वैकल्पिक वाक्यविन्यास है :
यदि OFFSET कीवर्ड के बजाय अल्पविराम का उपयोग किया जाता है, तो ऑफसेट पहली संख्या है और सीमा दूसरी संख्या है। यह प्रतीत होता है कि विरोधाभास जानबूझकर है - यह विरासत SQL डेटाबेस सिस्टम के साथ संगतता को अधिकतम करता है।
मैंने कुछ परीक्षण किए और प्रदर्शन में कोई अंतर नहीं है।
यह केवल अन्य sql भाषाओं के साथ संगतता के लिए है।
दोनों संस्करणों का रनिंग टाइम एक ही है।
मैंने 100000 पंक्तियों के साथ तालिका 1 के साथ साइक्लाइट डीबी बनाया। मैं अगला परीक्षण चलाता हूं
long timeLimitOffset = 0;
long timeLimitComma = 0;
for (int i = 0; i < 100000; i++)
{
//first version
timeLimitOffset += SqlDuraction("Select * from table1 order by col1 LIMIT " + (i + 1) + " OFFSET " + (1001 - i) + "");
// second version
timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT " + (1001 - i) + " , " + (i + 1) + "");
}
टाइम्स एक सेकंड के 0.001 के लिए भिन्न होता है