InnoDB से डेटा हटाना सबसे महंगा ऑपरेशन है जिसका आप अनुरोध कर सकते हैं। जैसा कि आप पहले ही खोज चुके हैं कि क्वेरी ही समस्या नहीं है - उनमें से अधिकांश को वैसे भी उसी निष्पादन योजना के लिए अनुकूलित किया जाएगा।
हालांकि यह समझना मुश्किल हो सकता है कि सभी मामलों के DELETE सबसे धीमे क्यों हैं, एक सरल व्याख्या है। InnoDB एक ट्रांजेक्शनल स्टोरेज इंजन है। इसका अर्थ यह है कि यदि आपकी क्वेरी को बीच में ही निरस्त कर दिया गया था, तो सभी रिकॉर्ड ऐसे ही रहेंगे जैसे कि कुछ हुआ ही न हो। एक बार यह पूरा हो जाने के बाद, सभी एक ही पल में चले जाएंगे। DELETE के दौरान सर्वर से कनेक्ट होने वाले अन्य क्लाइंट आपके DELETE पूर्ण होने तक रिकॉर्ड देखेंगे।
इसे प्राप्त करने के लिए, InnoDB MVCC (मल्टी वर्जन कंसुरेंसी कंट्रोल) नामक तकनीक का उपयोग करता है। यह मूल रूप से प्रत्येक कनेक्शन को पूरे डेटाबेस का एक स्नैपशॉट दृश्य देना है जैसा कि लेनदेन का पहला विवरण शुरू होने पर था। इसे प्राप्त करने के लिए, InnoDB में प्रत्येक रिकॉर्ड में आंतरिक रूप से कई मान हो सकते हैं - प्रत्येक स्नैपशॉट के लिए एक। यही कारण है कि InnoDB पर काउंटिंग में कुछ समय लगता है - यह उस समय आपके द्वारा देखे जाने वाले स्नैपशॉट स्थिति पर निर्भर करता है।
आपके DELETE लेन-देन के लिए, आपकी क्वेरी शर्तों के अनुसार पहचाने जाने वाले प्रत्येक रिकॉर्ड को हटाने के लिए चिह्नित किया जाता है। चूंकि अन्य क्लाइंट एक ही समय में डेटा तक पहुंच सकते हैं, यह उन्हें तुरंत तालिका से नहीं हटा सकता है, क्योंकि उन्हें हटाने की परमाणुता की गारंटी के लिए अपने संबंधित स्नैपशॉट को देखना होगा।
एक बार सभी रिकॉर्ड को हटाने के लिए चिह्नित कर लिया गया है, लेनदेन सफलतापूर्वक प्रतिबद्ध है। और फिर भी उन्हें वास्तविक डेटा पृष्ठों से तुरंत नहीं हटाया जा सकता है, इससे पहले कि आपके DELETE लेनदेन से पहले स्नैपशॉट मान के साथ काम करने वाले अन्य सभी लेन-देन भी समाप्त हो गए हों।
तो वास्तव में आपके 3 मिनट वास्तव में इतने धीमे नहीं हैं, इस तथ्य पर विचार करते हुए कि लेनदेन को सुरक्षित तरीके से हटाने के लिए उन्हें तैयार करने के लिए सभी रिकॉर्ड्स को संशोधित करना होगा। कथन के चलने के दौरान संभवतः आप अपनी हार्ड डिस्क को काम करते हुए "सुन"ेंगे। यह सभी पंक्तियों तक पहुँचने के कारण होता है। प्रदर्शन में सुधार करने के लिए आप अपने सर्वर के लिए InnoDB बफर पूल आकार को बढ़ाने का प्रयास कर सकते हैं और DELETE करते समय डेटाबेस तक अन्य पहुंच को सीमित करने का प्रयास कर सकते हैं, जिससे ऐतिहासिक संस्करणों की संख्या को भी कम किया जा सकता है। रिकॉर्ड। अतिरिक्त मेमोरी के साथ InnoDB आपकी तालिका (ज्यादातर) को मेमोरी में पढ़ने में सक्षम हो सकता है और कुछ डिस्क मांग समय से बच सकता है।