2010-06-03 8 views
7

मुझे कई तालिकाओं से दो साल से अधिक पुराने रिकॉर्ड हटाकर एक बहुत ही ब्लूटूथ SQL डेटाबेस साफ़ करने की आवश्यकता है। ऐसा करने का सबसे प्रभावी तरीका क्या है?SQL क्वेरी दो साल से अधिक पुराने रिकॉर्ड हटाने के लिए

+2

आरडीबीएमएस क्या है? 2 साल से अधिक पुराने रिकॉर्ड कितने हैं?2 साल से कम कितने रिकॉर्ड? –

+0

क्या प्रत्येक तालिका पर "बनाया गया" या "अंतिम अपडेट" फ़ील्ड का एक सामान्य सेट है? –

+1

आपके द्वारा उपयोग किए जा रहे SQL उत्पाद को जोड़ना महत्वपूर्ण है (MSSQL, mySQL, आदि)। उदाहरण के लिए एमएसएसक्यूएल में, यदि आपके पास सैकड़ों हजारों पंक्तियां हैं, तो आप लेनदेन लॉग वृद्धि के लिए देखना चाहते हैं। –

उत्तर

15

क्या आपके पास यह निर्धारित करने का कोई तरीका है कि रिकॉर्ड "पुराना" कैसा है? (यानी, क्या तालिका में कोई स्तंभ है जो या तो पंक्ति की आयु या उस तारीख का प्रतिनिधित्व करता है जिसका उपयोग उम्र की गणना करने के लिए किया जा सकता है?)। एडम रॉबिन्सन अच्छा जवाब के अलावा

DELETE FROM Table WHERE DATEADD(year, 2, CreateDate) < getdate() 
+2

हालांकि ताले के मामले में काफी बुरा हो सकता है। –

+0

@ मार्टिन: मुझे यकीन नहीं है कि इससे बचने योग्य है, या यहां तक ​​कि यदि आप चाहते हैं *। मैं नहीं देखता कि यह किसी भी अन्य 'हटाए गए' या 'अद्यतन' की तुलना में ताले के मामले में अधिक "बुरा" है, इस तथ्य के अलावा कि इसमें एक टेबल स्कैन शामिल है। –

+2

बैचों में ब्रेकिंग को समेकन के लिए बेहतर हो सकता है। –

3

: यदि हां, तो यह एक साधारण

DELETE FROM Table WHERE Age > 2 

उदाहरण के लिए होना चाहिए, यदि आप एक DateTime स्तंभ CreateDate कहा जाता है, तो आप ऐसा कर सकता है जब यह प्रदर्शन आपरेशन के प्रकार:

  1. इन्हें हटाना एक चयन करें क्वेरी चलाएँ कहां खंड पहले सुनिश्चित करें कि आप हो रही है "सही डेटा"
  2. बनाने के लिए है 210
  3. एक पूर्ण बैकअप घंटे "बंद" में
  4. भागो बात करते हैं ताकि उन बहुत ज्यादा
0

मैं डीबीए देखा है कुछ अलग कंपनियों में ऐसा और यह हमेशा उपयोग करने के लिए लगता है को प्रभावित करने के लिए नहीं निम्न स्वरूप:

  1. बैकअप तालिका
  2. ड्रॉप किसी भी अनुक्रमित
  3. पंक्तियों आप एक अस्थायी तालिका
  4. Trun में रखना चाहते हैं का चयन करें आप अस्थायी तालिका से cate मूल तालिका
  5. सम्मिलित (अपने स्रोत तालिका में)
  6. पुन: अनुक्रमणिका

इस दृष्टिकोण को लाभ यह है कि लॉग के लिए इस अद्यतन does not को लिखने तो वे नहीं मिलता है हजारों हटाए गए प्रविष्टियों द्वारा उड़ाया गया। यह भी तेज़ है।

दोष यह है कि अद्यतन लॉग को नहीं लिखता है, इसलिए आपका एकमात्र विकल्प आपके बैकअप को पुनर्स्थापित करना है।

आपको घर को रखने के बारे में सोचना चाहिए। यदि उपरोक्त, बहुत डरावना है, तो आप समय के मामले में डेटाबेस को जीतने के लिए घर का उपयोग भी कर सकते हैं।

एमएसएसक्यूएल में, आप रोज़ाना चलाने के लिए नौकरी बना सकते हैं जो आपकी क्वेरी की पहली 1000 पंक्तियों को हटा देता है। एडम क्वेरी चोरी करने के लिए -

DELETE शीर्ष 1000 मेज से कहां DATEADD (वर्ष, 2, CreateDate) < getdate()

यह बहुत ही सुरक्षित होगा और या तो सुरक्षित रूप से तीन महीने में अपने डेटा से छुटकारा पाने के हैं और क्या वे भविष्य में डीबी के आकार को भी बनाए रखेंगे।

आपका डेटाबेस भविष्य में इस स्थान का उपयोग करेगा, लेकिन यदि आप स्पेस को पुनर्प्राप्त करना चाहते हैं तो आपको डेटाबेस को कम करने की आवश्यकता होगी। यदि आप रुचि रखते हैं तो चारों ओर पढ़ें - चाहे वह लायक है, डीबी के कुल आकार के विरुद्ध पुनर्प्राप्त करने के लिए अंतरिक्ष की मात्रा पर निर्भर करता है।

संबंधित मुद्दे