मैं एक ऐसे प्रोग्राम को बनाए रखने में मदद कर रहा हूं जो अनिवार्य रूप से एक बड़े और जटिल MySQL डेटाबेस के लिए एक दोस्ताना पठन-केवल फ्रंट-एंड है - कार्यक्रम उपयोगकर्ताओं के इनपुट से विज्ञापन-चयन क्वेरी बनाता है, डीबी को प्रश्न भेजता है, परिणाम, उन्हें प्रक्रियाओं के बाद, और उन्हें अच्छी तरह से उपयोगकर्ता को प्रदर्शित करता है।मैं एक MySQL क्वेरी के * पूर्वानुमान * प्रदर्शन के लिए EXPLAIN का उपयोग कैसे करूं?
मैं निर्मित क्वेरी के अपेक्षित प्रदर्शन के लिए उचित/ह्युरिस्टिक भविष्यवाणी का कुछ रूप जोड़ना चाहता हूं - कभी-कभी उपयोगकर्ता अनजाने में ऐसे प्रश्न पूछते हैं जो अनिवार्य रूप से बहुत लंबे समय तक ले जा रहे हैं (क्योंकि वे बड़े परिणाम सेट वापस कर देंगे, या क्योंकि वे डीबी को अनुक्रमित करने के तरीके के "अनाज के खिलाफ जा रहे हैं") और मैं उपयोगकर्ता को कुछ "कुछ हद तक भरोसेमंद" जानकारी/अनुमान लगाने में सक्षम होना चाहता हूं कि क्वेरी कितनी देर तक चल रही है। इसे सही नहीं होना चाहिए, जब तक कि यह "बुरी भेड़िया" प्रभाव के कारण वास्तविकता के साथ इतनी बुरी तरह से और अक्सर बाहर नहीं निकलता है, जहां उपयोगकर्ता इसे अवहेलना करना सीखते हैं ;-) इस जानकारी के आधार पर, उपयोगकर्ता कॉफी प्राप्त करने का फैसला कर सकता है (यदि अनुमान 5-10 मिनट है), दोपहर के भोजन के लिए जाएं (यदि यह 30-60 मिनट है), क्वेरी को मारें और इसके बजाय कुछ और कोशिश करें (शायद वे जिस जानकारी का अनुरोध कर रहे हैं उस पर कड़े सीमाएं), आदि, आदि
मैं समझाता बयान MySQL के साथ बहुत परिचित नहीं हूँ - मैं चारों ओर कैसे अनुकूलन एक प्रश्न या एक DB स्कीमा, अनुक्रमण, आदि के लिए इसका इस्तेमाल करने के लिए के बारे में जानकारी का एक बहुत देखते हैं, लेकिन मेरे सीमित सीमित उद्देश्य के लिए इसका उपयोग कैसे करें - बस एक भविष्यवाणी करें, डीबी को दिए गए अनुसार (निश्चित रूप से अगर पूर्वानुमान पर्याप्त विश्वसनीय हैं तो मैं अंततः वैकल्पिक रूपों के बीच चयन करने के लिए भी उनका उपयोग कर सकता हूं। क्वेरी ले सकती है, लेकिन, यह भविष्य के लिए है: अभी के लिए, उपरोक्त उद्देश्यों के लिए उपयोगकर्ताओं को प्रदर्शन guesstimates दिखाने के लिए मैं बहुत खुश हूं)।
कोई पॉइंटर्स ...?
की resultset हम इस समय उप प्रश्नों पैदा न करें ताकि बिट एक समस्या नहीं होनी चाहिए के बारे में अधिक पढ़ें। लेकिन सूचक के लिए वैसे भी धन्यवाद - और खबर है कि एक प्रश्न की लागत का अनुमान लगाने का कोई अच्छा तरीका नहीं है (बुरी खबर, लेकिन इससे पहले कि मैं चिमेरा का पीछा करने में असमर्थ समय बिताने से पहले सीखूं!)। –
EXPLAIN बेहद सहायक है। मुझे यकीन नहीं है कि यह 'उत्तर' क्यों है। कार्डिनालिटी को चेकआउट करें - पंक्तियों की संख्या जितनी अधिक होगी, उतना अधिक खोज करना होगा। साथ ही, यह दिखाता है कि, यदि कोई है, तो इंडेक्स का उपयोग किया जा रहा है। चयन प्रदर्शन के लिए यह महत्वपूर्ण है। सबक्वायरीज़ के लिए, यह बहुत ही दुर्लभ है कि उन्हें वास्तव में जरूरी है - जब स्पष्टता के लिए संभव हो तो उन्हें फिर से बाहर किया जाना चाहिए। –