2012-07-27 11 views
10

मेरे कार्यक्रम में मेरे पास बहुत कम आवेषण हैं, और जो भी अक्सर चलाए जाते हैं उन्हें तत्काल आवश्यकता नहीं होती है और इसलिए INSERT DELAYED में बदल दिया गया है। क्या मुझे अपने कोड से गुज़रना चाहिए और देखें कि WHERE खंड में कौन से फ़ील्ड संदर्भित हैं और उनमें से प्रत्येक के लिए एक इंडेक्स जोड़ें? यदि ऐसा है तो मैं किस प्रकार का इंडेक्स उपयोग करता हूं? क्या यह सिर्फ आवेषण है जो धीमा हो गया है?क्या मुझे WHERE खंड में सभी फ़ील्ड के लिए एक अनुक्रमणिका जोड़नी चाहिए? - MySQL

क्या मैं इन इंडेक्स को किसी भी डेटा प्रकार पर उपयोग कर सकता हूं?

उत्तर

13

दो प्रमुख स्थान हैं जहां हम अनुक्रमण पर विचार कर सकते हैं: WHERE क्लॉज और कॉलम में संदर्भित कॉलम जोन क्लॉज में उपयोग किए जाते हैं। संक्षेप में, ऐसे कॉलमों को अनुक्रमित किया जाना चाहिए जिसके खिलाफ आपको विशेष रिकॉर्ड खोजना आवश्यक है।

  • केवल सूचकांक उन स्तंभों कि आवश्यक हैं जहां और खंड द्वारा आदेश। बहुतायत में इंडेक्सिंग कॉलम के परिणामस्वरूप नुकसान होंगे।
  • उन कॉलम के लिए नॉट विशेषता का उपयोग करें जिसमें आप इंडेक्सिंग मानते हैं, ताकि नल मान कभी संग्रहीत नहीं किए जाएंगे।
  • अनुक्रमणिका का उपयोग नहीं कर रहे प्रश्नों को लॉग इन करने के लिए --log-long-format विकल्प का उपयोग करें। इस तरह, आप इस लॉग फ़ाइल की जांच कर सकते हैं और तदनुसार अपने क्वेरी समायोजित कर सकते हैं। धीमी क्वेरी लॉग भी।
  • EXPLAIN कथन आपको यह प्रकट करने में मदद करता है कि MySQL एक क्वेरी निष्पादित करेगा। यह दिखाता है कि कैसे और किस क्रम तालिका में शामिल हो गए हैं। यह अनुकूलित प्रश्नों को लिखने के तरीके के लिए बहुत उपयोगी हो सकता है, और क्या कॉलम अनुक्रमित होने की आवश्यकता है या नहीं।

यह blog अच्छा है।

1

प्रदर्शन समस्या देखने से पहले अपने प्रश्नों को बदलने के लिए मत जाओ - यह समयपूर्व अनुकूलन है। इसके बजाय, यह देखने के लिए MySQL क्वेरी लॉग का उपयोग करें कि कौन से प्रश्न लंबे समय से ले रहे हैं, और उन प्रश्नों को बेहतर बनाने पर ध्यान केंद्रित करें।

+0

मैं अभी भी अपनी वेबसाइट विकसित करने की प्रक्रिया में हूं, इसलिए इसे वापस आने और इसे बाद में ठीक करने के बजाय इसे यथासंभव अनुकूलित करने के लिए एक बेहतर विचार प्रतीत होता है। –

+1

मैं आपको इस चरण में भी समयपूर्व अनुकूलन से हतोत्साहित करता हूं। अपने आप का उपयोग करके अपनी साइट के प्रदर्शन का परीक्षण करें - या दोस्तों का इसका उपयोग करें। फिर देखें कि क्वेरी लॉग में कौन से प्रश्न धीमे हैं। यदि आप इस तरह के अनुकूलन करने के बजाय, जल्दी लॉन्च कर सकते हैं। –

+4

WHERE खंडों में उपयोग किए गए फ़ील्ड में अनुक्रमणिका जोड़ना समयपूर्व अनुकूलन नहीं है। वह डेटाबेस डिज़ाइन 101 है। जब आप अपनी टेबल संरचना निर्धारित कर रहे हों तो इसे हमेशा विचार करना चाहिए। –

1

आपको WHERE क्लॉज में उपयोग करने के लिए किसी भी फ़ील्ड पर हमेशा एक इंडेक्स जोड़ना चाहिए (चाहे चयन, अद्यतन, या हटाएं)। सूचकांक का प्रकार फ़ील्ड में डेटा के प्रकार पर निर्भर करता है और क्या आपको प्रत्येक पंक्ति की एक अद्वितीय मान रखने की आवश्यकता है। आम तौर पर डिफ़ॉल्ट इंडेक्स प्रकार (हैश बनाम बीटीआर) डिफ़ॉल्ट सेटिंग्स तक सबसे अच्छा छोड़ दिया जाता है जबतक कि आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं।

अब आप अलग-अलग इंडेक्स (एक फ़ील्ड) या कंपाउंड इंडेक्स का उपयोग करते हैं, इस पर निर्भर करता है कि एप्लिकेशन कैसे काम करता है और एक अधिक उन्नत विषय है, इसलिए आम तौर पर अगर बस शुरू हो रहा है तो प्रत्येक फ़ील्ड के लिए उपयोग करें और इंडेक्स करें। ध्यान दें कि आपकी प्राथमिक कुंजी में स्वचालित रूप से अनुक्रमणिका होती है ताकि आपको उन पर एक और अनुक्रमणिका बनाने की आवश्यकता न हो।

संबंधित मुद्दे