EXPLAIN रिपोर्ट की व्याख्या करना कठिन माना जाता है। उन्होंने कुछ क्षेत्रों में बहुत अधिक जानकारी को ओवरलोड कर दिया है। आप कोशिश कर सकते हैं
type: index
इंगित करता है कि यह एक इंडेक्स-स्कैन कर रहा है , जिसका अर्थ है कि यह अनुक्रमणिका में प्रत्येक प्रविष्टि पर जा रहा है।
यह एक टेबल-स्कैन के रूप में समान प्रविष्टियों पर जाता है, सिवाय इसके कि यह क्लस्टर (प्राथमिक) अनुक्रमणिका के बजाय द्वितीयक अनुक्रमणिका के विरुद्ध है।
जब हम देखते हैं type: index
, EXPLAIN possible_keys: NULL
. दिखाता है जिसका अर्थ है कि यह कुशलतापूर्वक खोज के लिए किसी भी अनुक्रमणिका का उपयोग नहीं कर सकता है। लेकिन यह key: add_time
. भी दिखाता है जिसका अर्थ है कि वह इंडेक्स-स्कैन के लिए जिस इंडेक्स का उपयोग कर रहा है वह है add_time
।
इंडेक्स-स्कैन इस तथ्य के कारण है कि MySQL अभिव्यक्तियों या फ़ंक्शन कॉल को स्वयं अनुकूलित नहीं कर सकता है। उदाहरण के लिए, यदि आप किसी विशिष्ट माह के साथ तिथियों की खोज करने का प्रयास करते हैं, तो आप month(add_time) = 4
खोज सकते हैं। लेकिन वह add_time पर अनुक्रमणिका का उपयोग नहीं करेगा क्योंकि उस महीने की तिथियां अनुक्रमणिका के माध्यम से बिखरी हुई हैं, सभी को एक साथ समूहीकृत नहीं किया गया है।
आप जानते होंगे कि date(add_time)
सूचकांक द्वारा खोजा जाने में सक्षम होना चाहिए, लेकिन MySQL उस अनुमान को नहीं बनाता है। MySQL बस यह देखता है कि आप एक फ़ंक्शन का उपयोग कर रहे हैं, और यह इंडेक्स का उपयोग करने का प्रयास भी नहीं करता है।
इसलिए MySQL 5.7 ने जेनरेट किए गए कॉलमको पेश किया। ए> हमें एक अभिव्यक्ति को अनुक्रमित करने की अनुमति देने के लिए, और MySQL 8.0 ने एक एक व्यंजक के लिए परिभाषित की जाने वाली अनुक्रमणिका हमें पहले जेनरेट किए गए कॉलम को परिभाषित करने की आवश्यकता नहीं है।