किसी विशेष महीने में, किसी विशेष वर्ष के लिए प्रविष्टियाँ प्राप्त करने के लिए, तेज़ी से - आप time
को अनुक्रमित करने की आवश्यकता है स्तंभ
:
CREATE INDEX idx_time ON ENTRIES(time) USING BTREE;
इसके अतिरिक्त, उपयोग करें:
SELECT e.*
FROM ENTRIES e
WHERE e.time BETWEEN '2010-04-01' AND DATE_SUB('2010-05-01' INTERVAL 1 SECOND)
...क्योंकि BETWEEN समावेशी है, इसलिए आपके द्वारा पोस्ट की गई क्वेरी के साथ आपको "2010-05-01 00:00:00" दिनांकित कुछ भी प्राप्त होगा।
मैं किसी दिए गए DataSourceID से निश्चित महीने का डेटा भी चुनना चाहूंगा
आप या तो डेटासोर्सिड कॉलम के लिए एक अलग इंडेक्स जोड़ सकते हैं:
CREATE INDEX idx_time ON ENTRIES(datasourceid) USING BTREE;
...या दोनों कॉलम शामिल करने के लिए एक कवरिंग इंडेक्स सेट करें:
CREATE INDEX idx_time ON ENTRIES(time, datasourceid) USING BTREE;
एक कवरिंग इंडेक्स के लिए आवश्यक है कि इंडेक्स का उपयोग करने के लिए क्वेरी में सबसे बाएं कॉलम का उपयोग किया जाए। इस उदाहरण में, time
पहले आपके द्वारा उल्लिखित दोनों स्थितियों के लिए काम करेगा - इंडेक्स के उपयोग के लिए डेटासोर्सिड का उपयोग करने की आवश्यकता नहीं है। लेकिन, आपको वास्तव में यह जानने के लिए EXPLAIN आउटपुट देखकर अपने प्रश्नों का परीक्षण करना होगा कि आपके डेटा और उस डेटा पर किए जा रहे प्रश्नों के लिए सबसे अच्छा क्या है।
उस ने कहा, अनुक्रमणिका INSERT, UPDATE और DELETE कथनों को धीमा कर देगी। और यदि कॉलम डेटा में कुछ विशिष्ट मान हैं तो एक इंडेक्स बहुत अधिक मूल्य प्रदान नहीं करता है - IE:एक बूलियन कॉलम इंडेक्स के लिए एक खराब विकल्प है, क्योंकि कार्डिनैलिटी कम है।