मैंने विखंडन को रोकने और किसी तरह कुछ प्रश्नों के निष्पादन को अनुकूलित करने के लिए MySQL में अनुक्रमणिका को बनाए रखने के तरीके के बारे में बहुत शोध किया।
मैं उस सूत्र से परिचित हूं जो एक तालिका के लिए उपलब्ध अधिकतम स्थान के बीच अनुपात की गणना करता है। डेटा और अनुक्रमित द्वारा उपयोग किए जाने वाले स्थान।
हालाँकि मेरे मुख्य प्रश्न अभी भी अनुत्तरित हैं। शायद यह इस तथ्य के कारण है कि मैं एसक्यूएल सर्वर में सूचकांक रखरखाव से परिचित हूं, और मुझे लगता है कि MySQL में यह किसी भी तरह समान होना चाहिए।
SQL सर्वर में, आपके पास कई अनुक्रमणिकाएँ हो सकती हैं, और इसमें से प्रत्येक में विखंडन के विभिन्न स्तर हो सकते हैं। फिर आप किसी एक को उठा सकते हैं और बाकी को प्रभावित किए बिना उस विशेष सूचकांक में 'REORGANIZE' या 'REBUILD' ऑपरेशन कर सकते हैं।
मेरे ज्ञान का सबसे अच्छा करने के लिए, इस तरह के रूप में कोई 'टेबल विखंडन' नहीं है, और SQL सर्वर 'टेबल विखंडन' को ठीक करने के लिए कोई उपकरण प्रदान नहीं करता है। यह क्या प्रदान करता है, सूचकांक विखंडन की जांच करने के लिए उपकरण हैं (एक सूचकांक वीएस द्वारा उपयोग किए गए पृष्ठों की संख्या के बीच का अनुपात समझा जाता है, उस पृष्ठ और संदर्भ की पूर्णता), साथ ही आंतरिक और बाहरी विखंडन।
यह सब समझने में काफी सरल है, कम से कम मेरे लिए।
अब, जब MySQL में अनुक्रमणिका को बनाए रखने की बारी आती है, तो केवल 'तालिका विखंडन' की अवधारणा मौजूद है, जैसा कि ऊपर बताया गया है।
MySQL की एक तालिका में कई सूचकांक हो सकते हैं, लेकिन जब मैं उस प्रसिद्ध सूत्र के साथ 'विखंडन अनुपात' की जांच करता हूं, तो मुझे प्रत्येक सूचकांक का विखंडन दिखाई नहीं देता है, लेकिन संपूर्ण रूप में तालिका।
जब मैं MySQL में अनुक्रमणिका का अनुकूलन करना चाहता हूं, तो मैं (SQL सर्वर में) पर काम करने के लिए एक विशेष सूचकांक नहीं चुनता हूं। इसके बजाय, मैं पूरी तालिका में एक 'ऑप्टिमाइज़' ऑपरेशन करता हूं, जो संभवतः सभी इंडेक्स को प्रभावित करता है।
जब तालिका MySQL में अनुकूलित होती है, तो डेटा + इंडेक्स वीएस द्वारा उपयोग किए जाने वाले स्थान के बीच का अनुपात कुल स्थान कम हो जाता है, जो हार्ड ड्राइव में कुछ प्रकार के भौतिक पुन: संगठन का सुझाव देता है, जो भौतिक स्थान की कमी में बदल जाता है। हालांकि, सूचकांक विखंडन केवल भौतिक स्थान के बारे में नहीं है, लेकिन आवेषण और अपडेट के कारण उस पेड़ की संरचना को समय के साथ बदल दिया गया है।
अंत में, मुझे InnoDB / MySQL में एक तालिका मिली। उस तालिका में 3 मिलियन रिकॉर्ड, 105 कॉलम और 55 इंडेक्स हैं। यह इंडेक्स को छोड़कर 1.5GB है, जो 2.1GB है।
अद्यतन करने, प्रविष्टि (हम वास्तव में रिकॉर्ड नहीं हटाते हैं) के लिए उस तालिका को कभी-कभी हजारों बार मारा जा रहा है।
उस सारणी को बने हुए कई साल हो गए हैं और मुझे पता है कि कोई भी अनुक्रमणिका बनाए नहीं रख सकता है।
मैं वहाँ एक विशाल विखंडन को खोजने की उम्मीद कर रहा था, लेकिन जब मैं विखंडन गणना निर्धारित के रूप में करता हूं
free_space / (data_length + index_length)
यह पता चला है कि मेरे पास केवल 0.2% विखंडन है। IMHO जो काफी अवास्तविक है।
तो बड़े सवाल हैं:
- मैं MySQL में किसी विशेष इंडेक्स के विखंडन की जांच कैसे करूं, संपूर्ण तालिका के रूप में नहीं
- क्या OPTIMIZE TABLE वास्तव में SQL सर्वर में किसी इंडेक्स के आंतरिक / बाहरी विखंडन को ठीक करता है?
- जब मैं MySQL में एक टेबल को ऑप्टिमाइज़ करता हूं, तो क्या यह वास्तव में टेबल पर सभी इंडेक्सों का पुनर्निर्माण करता है?
- क्या यह सोचना यथार्थवादी है कि किसी इंडेक्स के भौतिक स्थान को कम करना (स्वयं पेड़ को बनाए बिना) वास्तव में बेहतर प्रदर्शन में बदल जाता है?