इंडेक्स क्वेरी ऑप्टिमाइज़ेशन और तालिकाओं से तेज़ी से परिणाम खोजने में महत्वपूर्ण भूमिका निभा सकते हैं। तो यह सबसे महत्वपूर्ण कदम है कि किन कॉलमों को अनुक्रमित किया जाए। दो प्रमुख स्थान हैं जहाँ हम अनुक्रमण पर विचार कर सकते हैं: 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 */
चूंकि "क्रेता_ड" को 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 क्लॉज में स्थित हैं। इसके अलावा, एक अतिरिक्त फ़ील्ड, कंट्री टेबल से कंट्री_ड को इंडेक्सिंग के लिए माना जा सकता है क्योंकि यह एक जॉइन क्लॉज में है। इसलिए हर क्षेत्र में WHRE क्लॉज़ या JOIN क्लॉज़ में अनुक्रमण को माना जा सकता है।
निम्नलिखित सूची में कुछ सुझाव भी दिए गए हैं जिन्हें आपको हमेशा ध्यान में रखना चाहिए जब आप अपनी तालिका में अनुक्रमित बनाने का इरादा रखते हैं:
- केवल उन कॉलमों को अनुक्रमित करें जो WHERE और ORDER BY क्लॉस में आवश्यक हैं। बहुतायत में अनुक्रमण स्तंभों के परिणामस्वरूप कुछ नुकसान होंगे।
- MySQL के "इंडेक्स प्रीफिक्स" या "मल्टी-कॉलम इंडेक्स" फीचर का लाभ उठाने की कोशिश करें। यदि आप INDEX (first_name, last_name) जैसे इंडेक्स बनाते हैं, तो INDEX (first_name) न बनाएं। हालांकि, सभी खोज मामलों में "इंडेक्स प्रीफिक्स" या "मल्टी-कॉलम इंडेक्स" की सिफारिश नहीं की जाती है।
- उन स्तंभों के लिए NOT NULL विशेषता का उपयोग करें जिनमें आप अनुक्रमण पर विचार करते हैं, ताकि NULL मान कभी संग्रहीत न हों।
- अनुक्रमणिका का उपयोग न करने वाले प्रश्नों को लॉग करने के लिए --log-long-format विकल्प का उपयोग करें। इस तरह, आप इस लॉग फ़ाइल की जांच कर सकते हैं और अपने प्रश्नों को तदनुसार समायोजित कर सकते हैं।
- EXPLAIN स्टेटमेंट आपको यह बताने में मदद करता है कि MySQL क्वेरी को कैसे निष्पादित करेगा। यह दिखाता है कि टेबल कैसे और किस क्रम में जुड़ती है। यह निर्धारित करने के लिए बहुत उपयोगी हो सकता है कि अनुकूलित प्रश्नों को कैसे लिखा जाए, और क्या स्तंभों को अनुक्रमित करने की आवश्यकता है।
अपडेट (23 फरवरी 15):
कोई भी इंडेक्स (अच्छा / खराब) इन्सर्ट और अपडेट टाइम बढ़ाता है।
आपके अनुक्रमित (अनुक्रमित और प्रकार की संख्या) के आधार पर, परिणाम खोजा जाता है। यदि आपकी खोज का समय सूचकांक के कारण बढ़ने वाला है तो यह खराब सूचकांक है।
किसी भी किताब में, "इंडेक्स पेज" में चैप्टर स्टार्ट पेज, टॉपिक पेज नंबर शुरू, सब सब्जेक्ट पेज भी शुरू हो सकता है। सूचकांक पृष्ठ में कुछ स्पष्टीकरण मदद करता है लेकिन अधिक विस्तृत सूचकांक आपको भ्रमित कर सकता है या आपको डरा सकता है। इंडेक्स में भी मेमोरी होती है।
सूचकांक चयन बुद्धिमान होना चाहिए। ध्यान रखें कि सभी स्तंभों को सूचकांक की आवश्यकता नहीं होगी।