मैं आमतौर पर संयुक्त डेटा के माध्यम से सॉर्ट करने के लिए अनुक्रमणिका का उपयोग मैं पृष्ठ पर अंक लगाना या अनुरोध "streamily" करना चाहते हैं।
ग्राहक मानते हैं कि एक से अधिक ऑर्डर कर सकते हैं .. और 11 से 11 ग्राहक मौजूद हैं और प्रति ग्राहक कई आदेश यादृच्छिक क्रम में डाले गए हैं। मैं तारीख के बाद ग्राहक संख्या के आधार पर एक क्वेरी को सॉर्ट करना चाहता हूं। आपको आईडी फ़ील्ड को क्रमबद्ध करने के लिए आखिरी बार सेट करना चाहिए जहां एक ग्राहक की कई समान तिथियां होती हैं (भले ही वह कभी नहीं हो)।एक क्रमबद्ध क्वेरी की
sqlite> CREATE INDEX customer_asc_date_asc_index_asc ON orders
(customer ASC, date ASC, id ASC);
प्राप्त पेज 1 (10 आइटम तक सीमित):
sqlite> SELECT id, customer, date FROM orders
ORDER BY customer ASC, date ASC, id ASC LIMIT 10;
2653|1|1303828585
2520|1|1303828713
2583|1|1303829785
1828|1|1303830446
1756|1|1303830540
1761|1|1303831506
2442|1|1303831705
2523|1|1303833761
2160|1|1303835195
2645|1|1303837524
अगले पृष्ठ प्राप्त करें:
sqlite> SELECT id, customer, date FROM orders WHERE
(customer = 1 AND date = 1303837524 and id > 2645) OR
(customer = 1 AND date > 1303837524) OR
(customer > 1)
ORDER BY customer ASC, date ASC, id ASC LIMIT 10;
2515|1|1303837914
2370|1|1303839573
1898|1|1303840317
1546|1|1303842312
1889|1|1303843243
2439|1|1303843699
2167|1|1303849376
1544|1|1303850494
2247|1|1303850869
2108|1|1303853285
और इसी तरह ...
इंडेक्स को स्थानांतरित करने से सर्वर साइड इंडेक्स स्कैनिंग कम हो जाती है जब आप अन्यथा एक LIMIT के साथ एक क्वेरी ऑफसेट का उपयोग करते हैं। क्वेरी समय लंबे समय तक हो जाता है और ड्राइव की तलाश कठिन उच्च ऑफसेट चला जाता है। इस विधि का उपयोग करना इसे समाप्त करता है।
इस विधि का उपयोग करके सलाह दी जाती है कि क्या आप बाद में डेटा में शामिल होने की योजना बनाते हैं लेकिन केवल प्रति अनुरोध डेटा के सीमित सेट की आवश्यकता है। बड़े टेबल के लिए मेमोरी ओवरहेड को कम करने के लिए ऊपर वर्णित एक SUBSELECT के खिलाफ शामिल हों।
SQLite किसी सूचकांक के दूसरे कॉलम का उपयोग नहीं करेगा यदि पहला कॉलम असमानता अभिव्यक्ति था (उदाहरण के लिए ग्राहक> 33)। (अधिकांश डेटाबेस इंजन, कठिन होगा)। – vmatyi
यदि आप दो अलग-अलग सूचकांक बनाते हैं, तो उनमें से केवल एक का उपयोग किया जाएगा, दूसरी अभिव्यक्ति का मूल्यांकन पहले द्वारा उत्पन्न परिणाम सेट पर किया जाएगा। (ओरेकल पर, यह _could_ दो इंडेक्स खोज निष्पादित करता है और परिणाम सेट को छेड़छाड़ करता है, अगर ऑप्टिमाइज़ेशन लागत आधारित है और कुछ मानदंड मिलते हैं, लेकिन यह एक दुर्लभ मामला है)। – vmatyi