आपकी शैली बहुत ही असामान्य है।
अधिकतर लोग शायद WHERE began_at < NOW() AND finished_at > NOW()
लिखेंगे।
हालांकि। मैं दोनों क्षेत्रों में एक अनुक्रमणिका डालने की सलाह दूंगा।
एक संयुक्त कुंजी आपके काम नहीं आएगी क्योंकि यह केवल विशिष्ट तिथि संयोजनों के लिए खोजकर्ता को गति प्रदान करेगी।
वैसे यह पूरी तरह से सच नहीं है क्योंकि यदि आप betree का उपयोग करते हैं तो एक संयुक्त कुंजी आपकी मदद करेगी लेकिन उतनी अच्छी नहीं होगी जितनी कि आप उन्हें अलग से अनुक्रमित करते हैं। यदि आप समानता (=) ऑपरेटर के साथ फ़ील्ड के संयोजन खोजते हैं तो संयुक्त कुंजी बहुत अच्छी होती है। रैगन अनुरोधों में सिंगल फील्ड इंडेक्स बेहतर प्रदर्शन करते हैं।
आप "बहुआयामी श्रेणी खोज" के लिए थोड़ा सा गूगल कर सकते हैं।
इसका कारण यह है कि एक फ़ील्ड में सभी मेल खाने वाले फ़ील्ड मूल रूप से लॉग (एन) समय में btrees में पाए जा सकते हैं। तो आपका समग्र रनटाइम ओ (के * लॉग (एन)) होगा जो ओ (लॉग (एन)) है।पी>
बहुआयामी रेंज क्वेरी में O(sqrt(n)) का रनटाइम होता है जो अधिक होता है। हालांकि बेहतर कार्यान्वयन भी हैं जो लॉगरिदमिक रनटाइम भी प्राप्त करते हैं। हालांकि वे पूरी तरह से MySQL में लागू नहीं होते हैं, इसलिए यह संस्करण के आधार पर बदतर या भयानक होगा।
तो मुझे संक्षेप में बताएं:
-
एकल क्षेत्रों पर समानता तुलना:हैश इंडेक्स (रनटाइम O(1))
-
एकल फ़ील्ड पर श्रेणी खोज:एकल फ़ील्ड पर btree अनुक्रमणिका ( O(log(n)) )
-
कई क्षेत्रों में समानता खोज:संयुक्त हैश कुंजी (रनटाइम O(1))
वे मामले एक स्पष्ट बात हैं...
- कई क्षेत्रों पर श्रेणी खोज:अलग btree अनुक्रमणिका ( O(log(n)) )
यह वह जगह है जहाँ यह इतना स्पष्ट नहीं है। वर्तमान संस्करणों के साथ यह स्पष्ट रूप से ऊपर दिए गए कारणों के कारण अलग से अनुक्रमित करने के लिए बेहतर है। उस उपयोग के मामले के लिए एक सही कार्यान्वयन के साथ आप संयुक्त कुंजी के साथ बेहतर प्रदर्शन प्राप्त कर सकते हैं, लेकिन यह जानने में कोई प्रणाली नहीं है कि कौन इसका समर्थन करता है। MySQL ढीले अनुक्रमित का समर्थन करता है (जो आपको इसकी आवश्यकता है) संस्करण 5.0 के बाद से, लेकिन केवल बहुत सीमित है और क्वेरी ऑप्टिमाइज़र केवल दुर्लभ मामलों में ही उनका उपयोग करता है। 5.3 या कुछ और जैसे नए संस्करणों के बारे में नहीं जानते।
हालांकि MySQL के साथ ढीले इंडेक्स को लागू करने के साथ उन क्षेत्रों पर संयुक्त कुंजी जहां आप रेंज अनुरोध करते हैं या विभिन्न दिशाओं में सॉर्टिंग अधिक से अधिक प्रासंगिक हो जाते हैं।