आपको निश्चित रूप से अनुक्रमण पर कुछ समय पढ़ना चाहिए, इसके बारे में बहुत कुछ लिखा है, और यह समझना महत्वपूर्ण है कि क्या हो रहा है।
व्यापक रूप से बोलते हुए, और सूचकांक तालिका के पंक्तियों पर ऑर्डरिंग लगाता है।
सादगी के लिए, कल्पना करें कि एक टेबल केवल एक बड़ी सीएसवी फ़ाइल है। जब भी कोई पंक्ति डाली जाती है, तो अंत में पर डाली जाती है। इसलिए तालिका का "प्राकृतिक" क्रम केवल वह क्रम है जिसमें पंक्तियां डाली गई थीं।
कल्पना कीजिए कि आपको उस सीएसवी फ़ाइल को एक बहुत ही प्राथमिक स्प्रेडशीट एप्लिकेशन में लोड किया गया है। यह सभी स्प्रेडशीट डेटा प्रदर्शित करती है, और अनुक्रमिक क्रम में पंक्तियों को संख्या देती है।
अब कल्पना करें कि आपको उन सभी पंक्तियों को ढूंढने की आवश्यकता है जिनके पास तीसरे कॉलम में कुछ मान "एम" है। यह देखते हुए कि आपके पास क्या उपलब्ध है, आपके पास केवल एक विकल्प है। आप प्रत्येक पंक्ति के लिए तीसरे कॉलम के मान की जांच करने वाली तालिका को स्कैन करते हैं। यदि आपके पास बहुत सारी पंक्तियां हैं, तो इस विधि (एक "टेबल स्कैन") में काफी समय लग सकता है!
अब कल्पना करें कि इस तालिका के अतिरिक्त, आपको एक अनुक्रमणिका मिली है। यह विशेष अनुक्रमणिका तीसरे कॉलम में मानों की अनुक्रमणिका है। इंडेक्स तीसरे कॉलम से सभी मानों को सूचीबद्ध करता है, कुछ सार्थक क्रम में (कहें, वर्णानुक्रम में) और उनमें से प्रत्येक के लिए, पंक्ति संख्याओं की एक सूची प्रदान करता है जहां वह मान प्रकट होता है।
अब आपके पास सभी पंक्तियों को खोजने के लिए एक अच्छी रणनीति है जहां तीसरे कॉलम का मान "एम" है। उदाहरण के लिए, आप binary search कर सकते हैं!जबकि टेबल स्कैन के लिए आपको एन पंक्तियां देखने की आवश्यकता होती है (जहां एन पंक्तियों की संख्या है), बाइनरी खोज केवल तभी आवश्यक है कि आप लॉग-एन इंडेक्स प्रविष्टियों को सबसे बुरे मामले में देखें। वाह, यह निश्चित रूप से बहुत आसान है!
बेशक, यदि आपके पास यह अनुक्रमणिका है, और आप तालिका में पंक्तियां जोड़ रहे हैं (अंत में, क्योंकि हमारी वैचारिक तालिका काम करती है), आपको प्रत्येक बार इंडेक्स को अपडेट करने की आवश्यकता है। तो जब आप नई पंक्तियां लिख रहे हों तो आप थोड़ा और काम करते हैं, लेकिन जब आप कुछ खोज रहे होते हैं तो आप एक टन बचाते हैं।
तो, सामान्य रूप से, अनुक्रमण, पढ़ने की दक्षता और लिखने की दक्षता के बीच एक व्यापारिक बनाता है। कोई अनुक्रमणिका के साथ, आवेषण बहुत तेज़ हो सकते हैं - डेटाबेस इंजन बस तालिका में एक पंक्ति जोड़ता है। जैसे ही आप इंडेक्स जोड़ते हैं, इंजन को सम्मिलित करते समय प्रत्येक इंडेक्स को अपडेट करना होगा।
दूसरी तरफ, पढ़ना बहुत तेज़ हो जाता है।
उम्मीद है कि आपके पहले दो प्रश्नों को शामिल किया गया है (जैसा कि अन्य ने उत्तर दिया है - आपको सही संतुलन खोजने की आवश्यकता है)।
आपका तीसरा परिदृश्य थोड़ा और जटिल है। यदि आप LIKE का उपयोग कर रहे हैं, तो इंडेक्सिंग इंजन आमतौर पर आपकी पढ़ने की गति को पहले "%" तक मदद करेंगे। दूसरे शब्दों में, यदि आप 'foo% bar%' जैसे कॉलम को चुन रहे हैं, तो डेटाबेस सभी पंक्तियों को खोजने के लिए इंडेक्स का उपयोग करेगा जहां स्तंभ "foo" से शुरू होता है, और फिर सबसेट खोजने के लिए उस मध्यवर्ती पंक्ति को स्कैन करने की आवश्यकता होती है जिसमें "बार" है। चुनें ... जहां '% बार%' कॉलम इंडेक्स का उपयोग नहीं कर सकता है। मुझे उम्मीद है कि आप क्यों देख सकते हैं।
अंत में, आपको एक से अधिक कॉलम पर इंडेक्स के बारे में सोचना शुरू करना होगा। अवधारणा वही है, और समान सामानों के समान व्यवहार करती है - अनिवार्य रूप से, यदि आपके पास (ए, बी, सी) पर एक इंडेक्स है, तो इंजन इंडेक्स का उपयोग बाएं से दाएं से बेहतर तरीके से कर सकता है। तो कॉलम पर एक खोज (ए, बी, सी) इंडेक्स का उपयोग कर सकती है, जैसा कि एक (ए, बी) होगा। हालांकि, यदि आप खोज रहे थे तो इंजन को एक पूर्ण टेबल स्कैन करने की आवश्यकता होगी, जहां आप खोज रहे थे b = 5 और c = 1)
उम्मीद है कि यह थोड़ा हल्का शेड करने में मदद करता है, लेकिन मुझे दोहराना होगा कि आप कुछ खर्च करने से बेहतर हैं घंटों में इन चीजों को समझाने वाले अच्छे लेखों के लिए चारों ओर खुदाई करने वाले घंटे। अपने विशेष डेटाबेस सर्वर के दस्तावेज़ों को पढ़ने के लिए भी एक अच्छा विचार है। जिस तरह से इंडेक्स लागू किए जाते हैं और क्वेरी प्लानर्स द्वारा उपयोग किया जाता है, वे काफी व्यापक रूप से भिन्न हो सकते हैं।
आपको शायद प्रश्न को पुनः प्राप्त करना चाहिए। किसी भी डेटाबेस मॉडल को ऑप्टिमाइज़ेशन के लिए इंडेक्स का विकल्प एक महत्वपूर्ण हिस्सा है। और मेरे दृष्टिकोण के लिए php से असंबंधित। – VGE