हमारे पास एक mysql तालिका है जो किसी भी समय लगभग 12 मिलियन पंक्तियाँ होती है। हमें तालिका का आकार कुछ प्रबंधनीय रखने के लिए पुराने डेटा को हटाने की आवश्यकता है।
अभी हम रोजाना आधी रात को, क्रोन जॉब का उपयोग करके इस क्वेरी को चला रहे हैं:
DELETE FROM table WHERE endTime < '1393632001'
पिछली बार जब क्वेरी चली थी तो उसने 4,602,400 की जांच की, 3 मिनट से अधिक समय लगा और सीपीयू छत के माध्यम से चला गया।
सीपीयू, सिंक्रोनस डीबी कनेक्शंस, डिस्क क्यू डेप्थ आदि को पुराने डेटा को हटाते समय अनुचित तरीके से स्पाइकिंग से रखने के लिए हम क्या कर सकते हैं?
पुनश्च: आप देखेंगे कि क्वेरी वास्तव में हमारे उपयोग चक्र में एक काफी निष्क्रिय समय पर हो रही है। मान लें कि हमने पहले ही उपयोग के निम्नतम बिंदु पर होने के लिए क्वेरी का समय पहले ही स्थानांतरित कर दिया है। इसके अलावा, "एंडटाइम" पर कोई इंडेक्स नहीं है और अगर संभव हो तो मैं इसे इस तरह रखना चाहूंगा क्योंकि इसमें एक टन डेटा बहुत नियमित रूप से डाला जाता है, और बहुत अधिक लुकअप नहीं किया जाता है।