ऑफ़सेट के साथ LIMIT अधिकांश डेटाबेस में बेहद धीमा है (मैंने पाया है कुछ दस्तावेज़ीकरण MySQL के लिए इस आशय के लिए और मैं वास्तव में एक अच्छा लेख खोजने की कोशिश कर रहा हूं जिसे मैंने कुछ समय पहले SQLite के लिए समझाते हुए पढ़ा था)। इसका कारण यह है कि इसे आम तौर पर कुछ इस तरह से लागू किया जाता है:
- सभी सामान्य क्वेरी प्लानिंग करें जैसे कि
LIMIT
खंड वहां नहीं था - परिणामों को तब तक देखें जब तक हम आपकी इच्छित अनुक्रमणिका तक नहीं पहुंच जाते
- परिणाम लौटाना शुरू करें
इसका क्या मतलब है अगर आप LIMIT 10000, 10
. करते हैं , इसकी व्याख्या इस प्रकार की जाएगी:
- पहले 10,000 परिणाम प्राप्त करें और उन्हें अनदेखा करें
- आपको अगले 10 परिणाम दें
एक मामूली अनुकूलन है जहां आप कम से कम पहले 10,000 परिणामों के लिए इंडेक्स का उपयोग कर सकते हैं क्योंकि आप उनके मूल्यों की परवाह नहीं करते हैं, लेकिन उस स्थिति में भी, डेटाबेस को अभी भी आपको अपने 10 परिणाम देने से पहले 10,000 इंडेक्स मानों के माध्यम से चलना होगा। और भी अनुकूलन हो सकते हैं जो इसे सुधार सकते हैं, लेकिन सामान्य स्थिति में आप LIMIT
का उपयोग नहीं करना चाहते हैं बड़े मानों के लिए ऑफ़सेट के साथ ।
पेजिनेशन को संभालने का सबसे प्रभावी तरीका है कि मैं जानता हूं कि आखिरी इंडेक्स का ट्रैक रखना है, इसलिए यदि पेज एक id = 5
पर समाप्त होता है , फिर अपना अगला . बनाएं लिंक में WHERE id > 5
. है (LIMIT x
. के साथ बेशक)।
संपादित करें:SQLite के लिए लेख मिला . मैं अत्यधिक अनुशंसा करता हूं कि आप इसे पढ़ें क्योंकि यह SQL में चीजों को करने का सही तरीका बताता है। चूंकि SQLite लोग वास्तव में स्मार्ट हैं और अन्य डेटाबेस में भी यही समस्या है, मुझे लगता है कि MySQL इसे इसी तरह लागू करता है।