ऐसा करने का सबसे कारगर तरीका एक दृश्य का उपयोग करना है। हुह? इसका समस्या से क्या लेना-देना है? खैर, वार्ड के 10 मिनट बाद डिलीट न करें। इसके बजाय, निम्न तर्क के साथ एक दृश्य बनाएं:
create view v_recoveries as
select r.*
from recoveries r
where expiry > date_sub(now(), interval 10 minutes);
परफ़ॉर्मेंस के लिए, आप recoveries(expiry)
. पर एक इंडेक्स चाहते हैं , तो यह तेज़ होना चाहिए।
फिर, अपने खाली समय में -- प्रति तिथि एक बार, या प्रति घंटे एक बार, या प्रति सप्ताह एक बार -- इसके साथ अनावश्यक रिकॉर्ड हटाएं:
DELETE FROM `recoveries`
WHERE `expiry` <= date_sub(now(), interval 10 minutes);
इस दृष्टिकोण के कई फायदे हैं:
- किसी कार्य के शेड्यूलिंग के आधार पर डेटा की उपस्थिति ठीक 10 मिनट की होती है।
- वास्तविक विलोपन तब हो सकता है जब सिस्टम निष्क्रिय हो।
- यदि कोई क्रॉन जॉब निष्पादित करने में विफल रहता है, तो डेटा "दूषित" नहीं होता है - अर्थात, आपको बहुत पुराना डेटा नहीं मिलता है।
- यदि सिस्टम व्यस्त है (बहुत सारे इंसर्ट), तो इंसर्ट्स डिलीट के साथ प्रतिस्पर्धा नहीं कर रहे हैं, सिस्टम को और धीमा कर रहे हैं।