मान लीजिए कि मेरे पास दो फ़ील्ड, "foo" और "bar" के साथ डेटाबेस तालिका है। उनमें से कोई भी अद्वितीय नहीं है, लेकिन उनमें से प्रत्येक अनुक्रमित हैं। हालांकि, एक साथ अनुक्रमित होने की बजाय, उनमें से प्रत्येक के पास एक अलग इंडेक्स है।एकाधिक इंडेक्स एक साथ काम कर सकते हैं?
अब मान लीजिए कि मैं SELECT * FROM sometable WHERE foo='hello' AND bar='world';
जैसी क्वेरी करता हूं, मेरी तालिका में बड़ी संख्या में पंक्तियां हैं जिनके लिए फू 'हैलो' है और पंक्तियों की एक छोटी संख्या जिसके लिए बार 'दुनिया' है।
तो हुड के तहत करने के लिए डेटाबेस सर्वर के लिए सबसे कुशल चीज बार फ़ील्ड का उपयोग उन सभी क्षेत्रों को खोजने के लिए करती है जहां बार 'दुनिया' है, फिर केवल उन पंक्तियों को वापस करें जिनके लिए foo 'हैलो' है। यह O(n)
है जहां एन पंक्तियों की संख्या है जहां बार 'दुनिया' है।
हालांकि, मुझे लगता है यह है कि इस प्रक्रिया, रिवर्स में होगा जहां के लिए सूचकांक इस्तेमाल किया गया था और परिणाम की खोज संभव है। यह O(m)
होगा जहां एम पंक्तियों की संख्या है जहां foo 'हैलो' है।
तो ओरेकल कुशलता से यहाँ खोज करने के लिए बहुत चालाक है? अन्य डेटाबेस के बारे में क्या? या क्या कोई तरीका है कि मैं इसे उचित आदेश में खोजने के लिए अपनी क्वेरी में बता सकता हूं? शायद bar='world'
डालकर WHERE
खंड में पहले?
सभी के साथ डेविड का सम्मान करें, नीचे एली की टिप्पणियों को देखते हुए, उनके प्रश्न का उत्तर "बिटमैप्स का उपयोग करें"। –
बिटमैप इंडेक्स निश्चित हैं इस प्रकार की क्वेरी पर ly कुशल है, लेकिन वे वास्तव में एक OLTP वातावरण में असभ्य हैं। यह जानने के लायक भी है कि बिट्री इंडेक्स की एक जोड़ी को बिटमैप ऑपरेशन में जोड़ा जा सकता है, हालांकि इस पर बहुत अधिक ओवरहेड है। –