रेमंड निजलैंड के सवाल पर टिप्पणी से उत्पन्न सामुदायिक विकी उत्तर
का उपयोग करें EXPLAIN
। इस तरह से आप देख सकते हैं कि क्वेरी MAY को डिस्क IO की आवश्यकता है या नहीं। आपको अतिरिक्त "अस्थायी का उपयोग करना" या "अस्थायी का उपयोग करना" से बचने की आवश्यकता है ; फाइलशॉर्ट का उपयोग करना (ध्यान दें कि फाइलॉर्ट एक भ्रामक नाम है: यदि परिणाम सेट मेमोरी में फिट बैठता है, तो मेमोरी में क्विकॉर्ट रन होता है) "।
यह सब-वेरीज़ / यूनियनों / ऑर्डर द्वारा / ग्रुप द्वारा / के द्वारा / ... यदि आपका रिजल्ट बड़ा है और MyISAM डिस्क-आधारित अस्थायी तालिका बनाई गई है, और आपको परिणाम सॉर्ट करने की आवश्यकता है, तो आप परिणाम को सॉर्ट कर रहे हैं IO के आधार पर सेट पढ़ता है और IO quicksort एल्गोरिथम के साथ लिखता है।
MySQL में Internal Temporary Table Use में आप पढ़ सकते हैं जब MySQL को डिस्क-आधारित MyISAM टेबल बनाने की आवश्यकता होती है। शायद आप avg_row_length * पंक्तियों का उपयोग कर सकते हैं (हालांकि ध्यान दें कि पंक्तियों का मूल्य InnoDB इंजन के साथ सटीक नहीं है) यह जांचने के लिए कि क्या परिणाम ढेर में फिट बैठता है। देखें SHAT TABLE STATUS सिंटैक्स ।
सामान्य तौर पर I / O अनुरोधों से बचने के लिए InnoDB या MyISAM बेहतर है?
InnoDB टेबल डेटा और इंडेक्स डेटा को बफर करेगा, जबकि MyISAM केवल बफर्स इंडेक्स कीज़। जब स्तंभ अतिरिक्त समझाता है "इंडेक्स का उपयोग नहीं करता" कहे जाने पर तालिका डेटा के लिए I / O की आवश्यकता है ।
यदि दोनों इंडेक्स का उपयोग कर रहे हैं: InnoDB के साथ, यदि बफर गर्म है तो यह मेमोरी से डेटा लोड कर सकता है। यदि अनुक्रमणिका को डिस्क से आने की आवश्यकता है तो एक सूत्र है जिसका उपयोग आप गणना, आवेषण और अपडेट के लिए आवश्यक आईओ रीड की गणना करने के लिए कर सकते हैं। क्वेरी प्रदर्शन का अनुमान लगाने से :
छोटी तालिकाओं के लिए, आप आमतौर पर एक डिस्क की तलाश में एक पंक्ति पा सकते हैं (क्योंकि सूचकांक संभवतः कैश किया गया है)। बड़ी तालिकाओं के लिए, आप अनुमान लगा सकते हैं कि, बी-ट्री इंडेक्स का उपयोग करते हुए, आपको एक पंक्ति ढूंढने के लिए यह बहुत सारे चाहिए:
log(rows) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1
InnoDB अनुक्रमित बड़ा होता है क्योंकि यह एक प्रमुख सूचकांक में PRIMARY / UNIQUE कुंजी से डेटा संग्रहीत करता है। यह तेज़ है और IO के लिए भी कम की जरूरत है लेकिन आप InnoDB डेटा या इंडेक्स को कंप्रेस कर सकते हैं।