इंडेक्स क्वेरी ऑप्टिमाइज़ेशन और टेबल से तेज़ी से परिणाम खोजने में महत्वपूर्ण भूमिका निभा सकते हैं। इसलिए यह चुनना सबसे महत्वपूर्ण कदम है कि कौन से कॉलम अनुक्रमित किए जाएं। दो प्रमुख स्थान हैं जहाँ हम अनुक्रमण पर विचार कर सकते हैं:WHERE क्लॉज़ में संदर्भित कॉलम और JOIN क्लॉज़ में उपयोग किए जाने वाले कॉलम। संक्षेप में, ऐसे स्तम्भों को अनुक्रमित किया जाना चाहिए जिनके सामने आपको विशिष्ट अभिलेखों की खोज करनी है। मान लीजिए, हमारे पास खरीदारों नाम की एक तालिका है जहां SELECT क्वेरी नीचे दिए गए इंडेक्स का उपयोग करती है:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
चूंकि "buyer_id" को SELECT भाग में संदर्भित किया गया है, MySQL चयनित पंक्तियों को सीमित करने के लिए इसका उपयोग नहीं करेगा। इसलिए, इसे अनुक्रमित करने की कोई बड़ी आवश्यकता नहीं है। नीचे एक और उदाहरण है जो ऊपर वाले से थोड़ा अलग है:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
उपरोक्त प्रश्नों के अनुसार first_name, last_name कॉलम को अनुक्रमित किया जा सकता है क्योंकि वे WHERE क्लॉज में स्थित हैं। इसके अलावा एक अतिरिक्त फ़ील्ड, देश तालिका से देश_आईडी, को अनुक्रमण के लिए माना जा सकता है क्योंकि यह जॉइन क्लॉज में है। इसलिए WHERE क्लॉज या जॉइन क्लॉज में हर फील्ड पर इंडेक्सिंग पर विचार किया जा सकता है।
निम्नलिखित सूची में कुछ सुझाव भी दिए गए हैं जिन्हें आपको अपनी तालिकाओं में अनुक्रमणिका बनाते समय हमेशा ध्यान में रखना चाहिए:
- केवल उन्हीं कॉलमों को इंडेक्स करें जो WHERE और ORDER BY क्लॉज में आवश्यक हैं। स्तंभों को बहुतायत में अनुक्रमित करने से कुछ नुकसान होंगे।
- MySQL के "इंडेक्स प्रीफ़िक्स" या "मल्टी-कॉलम इंडेक्स" फ़ीचर का लाभ उठाने का प्रयास करें। यदि आप INDEX(first_name, last_name) जैसी अनुक्रमणिका बनाते हैं, तो INDEX(first_name) न बनाएं। हालांकि, सभी खोज मामलों में "इंडेक्स प्रीफ़िक्स" या "मल्टी-कॉलम इंडेक्स" की अनुशंसा नहीं की जाती है।
- उन स्तंभों के लिए NOT NULL विशेषता का उपयोग करें जिनमें आप अनुक्रमण पर विचार करते हैं, ताकि NULL मान कभी भी संग्रहीत न हों।
- --log-long-format विकल्प का उपयोग उन प्रश्नों को लॉग करने के लिए करें जो अनुक्रमणिका का उपयोग नहीं कर रहे हैं। इस तरह, आप इस लॉग फ़ाइल की जांच कर सकते हैं और अपने प्रश्नों को तदनुसार समायोजित कर सकते हैं।
- EXPLAIN स्टेटमेंट आपको यह बताने में मदद करता है कि MySQL किसी क्वेरी को कैसे निष्पादित करेगा। यह दिखाता है कि कैसे और किस क्रम में तालिकाओं को जोड़ा जाता है। यह निर्धारित करने के लिए बहुत उपयोगी हो सकता है कि अनुकूलित प्रश्नों को कैसे लिखा जाए, और क्या स्तंभों को अनुक्रमित करने की आवश्यकता है।
अपडेट करें (23 फरवरी'15):
कोई भी इंडेक्स (अच्छा/बुरा) डालने और अपडेट करने का समय बढ़ाता है।
आपकी अनुक्रमणिका (सूचकांक और प्रकार की संख्या) के आधार पर, परिणाम खोजा जाता है। यदि अनुक्रमणिका के कारण आपका खोज समय बढ़ने वाला है तो यह खराब अनुक्रमणिका है।
संभवतः किसी भी पुस्तक में, "इंडेक्स पेज" में अध्याय प्रारंभ पृष्ठ हो सकता है, विषय पृष्ठ संख्या प्रारंभ हो सकती है, उप विषय पृष्ठ भी शुरू हो सकता है। इंडेक्स पेज में कुछ स्पष्टीकरण मदद करता है लेकिन अधिक विस्तृत इंडेक्स आपको भ्रमित कर सकता है या आपको डरा सकता है। इंडेक्स में मेमोरी भी होती है।
सूचकांक चयन बुद्धिमान होना चाहिए। ध्यान रखें कि सभी स्तंभों को अनुक्रमणिका की आवश्यकता नहीं होगी।