2010-10-21 7 views
5

मैं लाखों पंक्ति पंक्ति से लगभग 9 0% पंक्तियां हटाना चाहता हूं। इसे तेजी से बनाने के लिए मैं कुछ भी कर सकता हूं? जैसे अगर मैं सरल रिकवरी मोड चालू करता हूं तो यह मदद करेगा?एक बड़ी तालिका (एसक्यूएल सर्वर) से बहुत सारे डेटा का तेजी से DELETE कैसे करें

उत्तर

8

उन पंक्तियों की प्रतिलिपि बनाएँ जिन्हें आप select into का उपयोग करके अस्थायी तालिका में हटाना नहीं चाहते हैं, और फिर truncate हटाए जाने के बजाय तालिका को हटाएं। पंक्तियों को पुरानी तालिका में वापस कॉपी करें। पहले drop contraints को याद रखें।

यदि आपके पास डेटा कॉलर के बाद पहचान कॉलम हैं, तो तालिका का शोध करने के लिए ऐसा कुछ उपयोग करें।

declare @seed int 
select @seed = max(identity_col)+1 from tableName 
DBCC CHECKIDENT (orders, table_name, @seed) 
+0

अच्छा! मेरे पास पहचान कॉलम हैं इसलिए उन्हें इससे निपटना होगा, लेकिन यह ठीक है। – Rory

+1

+1 - यह कम से कम 2005+ में कम से कम लॉग इन है (पूर्व संस्करणों के बारे में निश्चित नहीं है) तो यह बहुत तेज़ होना चाहिए। सूचकांक पुनर्निर्माण के लिए आवश्यक समय को ध्यान में रखें। – JNK

2

यह देखते हुए कि आप पंक्तियों के 90% को नष्ट करना चाहते हैं, यह सबसे तेजी से हुए 10% से पंक्तियों आप एक नया तालिका में रखना चाहते हैं जांच का चयन हो सकता है।

1

आप एक और मेज पर आराम कॉपी नहीं कर सकते, तो काटना और वापस कॉपी ...

... सूचकांक छोड़ने केवल एक चीज आप बुद्धिमान प्रोग्रामिंग कर सकते हैं के बारे में है। इस मामले में सूचकांक छोड़ना और उन्हें पुनर्निर्माण करने में मदद मिल सकती है।

... या डेटा के लिए अधिक तेज़ डिस्क उपप्रणाली प्राप्त करें।

रिकवरी मोड मदद नहीं करेगा - वसूली मोड का कहना है कि लॉग (अंतर्निहित हो सकता है) के तुरंत बाद लॉग हटाया जा सकता है, लेकिन इसमें कुछ भी नहीं है जो लॉग प्रविष्टियों को writte से बचाता है।

1

IsDeleted (BIT) ध्वज जोड़ें, उस 90% के लिए 1 सेट करें, और अपनी तालिका पर एक दृश्य बनाएं जो केवल IsDeleted=0 के साथ पंक्तियां दिखाता है।

हटाना हमेशा एक है) संसाधन-गहन ऑपरेशन, और बी) उत्तरदायित्व की किसी भी संभावना को नष्ट कर देता है - यदि संभव हो तो मैं इसे टालने का प्रयास करूंगा, दोनों कारणों (प्रदर्शन और डेटा विनाश) के लिए। इसके बजाए "सॉफ्ट डिलीट" दृष्टिकोण का प्रयोग करें।

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