-
यदि आप उस तालिका की सभी पंक्तियों को हटा रहे हैं, तो तालिका को छोटा करना सबसे आसान विकल्प है, कुछ इस तरह
TRUNCATE TABLE LargeTable GO
Truncate तालिका बस तालिका को खाली कर देगी, आप हटाए जाने वाली पंक्तियों को सीमित करने के लिए WHERE क्लॉज का उपयोग नहीं कर सकते हैं और कोई भी ट्रिगर सक्रिय नहीं किया जाएगा।
-
दूसरी ओर यदि आप 80-90 प्रतिशत से अधिक डेटा हटा रहे हैं, तो कहें कि यदि आपके पास कुल 11 मिलियन पंक्तियां हैं और आप 10 मिलियन हटाना चाहते हैं तो दूसरा तरीका इन 1 मिलियन पंक्तियों को सम्मिलित करना होगा (रिकॉर्ड जिन्हें आप रखना चाहते हैं) ) दूसरी स्टेजिंग टेबल पर। इस बड़ी तालिका को छोटा करें और इन 1 मिलियन पंक्तियों को वापस डालें।
-
या यदि अनुमतियाँ/विचार या अन्य वस्तुएँ, जिनकी अंतर्निहित तालिका के रूप में यह बड़ी तालिका है, इस तालिका को छोड़ने से प्रभावित नहीं होती हैं, तो आप इन अपेक्षाकृत कम मात्रा में पंक्तियों को दूसरी तालिका में प्राप्त कर सकते हैं, इस तालिका को छोड़ सकते हैं और इसके साथ एक और तालिका बना सकते हैं। स्कीमा, और इन पंक्तियों को इस पूर्व-बड़ी तालिका में वापस आयात करें।
-
एक आखिरी विकल्प जो मैं सोच सकता हूं, वह है आपके डेटाबेस के
Recovery Mode to SIMPLE
में बदलना और फिर कुछ इस तरह लूप का उपयोग करके छोटे बैचों में पंक्तियों को हटा दें:DECLARE @Deleted_Rows INT; SET @Deleted_Rows = 1; WHILE (@Deleted_Rows > 0) BEGIN -- Delete some small number of rows at a time DELETE TOP (10000) LargeTable WHERE readTime < dateadd(MONTH,-7,GETDATE()) SET @Deleted_Rows = @@ROWCOUNT; END
और पुनर्प्राप्ति मोड को वापस पूर्ण में बदलना न भूलें और मुझे लगता है कि इसे पूरी तरह से प्रभावी बनाने के लिए आपको एक बैकअप लेना होगा (परिवर्तन या पुनर्प्राप्ति मोड)।