मेरे पास एक अरब पंक्तियों के साथ SQL Server 2008 R2 में एक तालिका है। मैं int से bigint तक दो कॉलम के डेटाटाइप को बदलना चाहता हूं। दो बार ALTER TABLE zzz ALTER COLUMN yyy
काम करता है, लेकिन यह बहुत धीमा है। मैं प्रक्रिया को कैसे गति दे सकता हूं? मैं डेटा को दूसरी तालिका में कॉपी करने, ड्रॉप करने, बनाने, प्रतिलिपि बनाने और सरल पुनर्प्राप्ति मोड में स्विच करने या किसी भी तरह से एक कर्सर के साथ एक 1000 पंक्तियों में स्विच करने के बारे में सोच रहा था, लेकिन मुझे यकीन नहीं है कि क्या वे वास्तव में किसी भी सुधार का नेतृत्व करेंगे।एक विशाल तालिका में कॉलम प्रकार बदलें
उत्तर
आप जो परिवर्तन कर रहे हैं उसके आधार पर, कभी-कभी रखरखाव विंडो लेना आसान हो सकता है। उस खिड़की (जहां कोई भी तालिका में डेटा को बदलने में सक्षम होना चाहिए) के दौरान आप कर सकते हैं:
- बूंद किसी भी अनुक्रमित/बाधाओं वर्ष स्तंभ की ओर इशारा करते, और अक्षम चलाता
- एक नया नल स्तंभ जोड़ने नए डेटा प्रकार के साथ (भले ही यह शून्य न हो)
- पुराने कॉलम के मान के बराबर नई कॉलम सेटिंग अपडेट करें (और आप इसे व्यक्तिगत लेनदेन के टुकड़ों में कर सकते हैं (कहें, 10000 पंक्तियों को प्रभावित करना
UPDATE TOP (10000) ... SET newcol = oldcol WHERE newcol IS NULL
का उपयोग करके समय) और अपने लॉग को ओवरराइज करने से बचने के लिए चेकपॉइंट के साथ) - एक बार अपडेट सब किया जाता है, पुराने कॉलम
- नया स्तंभ का नाम बदलने के ड्रॉप (और एक नहीं शून्य बाधा अगर उचित जोड़ने)
- अनुक्रमित और अद्यतन आंकड़ों के पुनर्निर्माण
कुंजी यहाँ है कि यह आप की अनुमति देता है चरण 3 में वृद्धि को अद्यतन करने के लिए, जिसे आप एकल ALTER तालिका कमांड में नहीं कर सकते हैं।
यह मानता है कि कॉलम डेटा अखंडता में एक प्रमुख भूमिका निभा रहा है - यदि यह विदेशी कुंजी संबंधों के समूह में शामिल है, तो और भी कदम हैं।
संपादित
इसके अलावा, और बस ज़ोर से सोच रहा है, मैं इस के लिए किसी भी परीक्षण नहीं किया है (लेकिन सूची में जोड़कर)। मुझे आश्चर्य है कि पेज + पंक्ति संपीड़न यहां मदद करेगा? यदि आप एक आईआईएन को बिगिनट में बदलते हैं, तो जगह में संपीड़न के साथ SQL सर्वर को अभी भी सभी मानों का इलाज करना चाहिए जैसे कि वे अभी भी एक आईएनटी में फिट हैं। दोबारा, मैंने परीक्षण नहीं किया है अगर यह तेजी से या धीमा हो जाएगा, या पहली जगह संपीड़न जोड़ने में कितना समय लगेगा। बस इसे बाहर फेंका जा रहा है।
डीबी ऑफ़लाइन होगा। रिकवरी मॉडल को सरल मदद के लिए सेट कर देगा? – user1417408
सरल या पूर्ण में, आपका विशाल वैकल्पिक तालिका कमांड अलग नहीं होगा, क्योंकि दोनों मामलों में पूरी चीज लॉग है। उपर्युक्त के साथ, सरल थोड़ा बेहतर हो सकता है, लेकिन यदि आप उपयुक्त बैच आकार चुनते हैं तो पुनर्प्राप्ति मॉडल से कोई फर्क नहीं पड़ता। इसके अलावा यदि डेटाबेस "ऑफलाइन" है (मुझे लगता है कि आप का मतलब नहीं है डाटाबेस ... सेट ऑफलाइन), गति क्यों मायने रखती है? उपरोक्त समय से कुछ प्रतिशत कम हो जाएगा, लेकिन यह दिमाग से तेजी से नहीं होगा। आप जो कर रहे हैं वह बस समय लेता है। –
हारून, आपकी मदद के लिए धन्यवाद। गति मायने रखती है क्योंकि इस डीबी का उपयोग करने वाली साइट केवल कुछ घंटों के लिए ऑफ़लाइन होगी। – user1417408
यदि आप SQL सर्वर प्रबंधन स्टूडियो जैसे कुछ का उपयोग कर रहे हैं तो आप डेटाबेस में तालिका पर जाएं, राइट-क्लिक करें, 'डिज़ाइन' चुनें और फिर उस कॉलम को चुनें जिसे आप संपादित करना चाहते हैं: इसे बिगिनट पर सेट करें और सहेजें दबाएं। पूरे कॉलम को बदलता है, लेकिन पिछले मान बने रहेंगे। यह तालिका को 'बड़े से बाहर' करने के लिए अनुमति देने के लिए अच्छा है, लेकिन जहां तक मुझे पता है मौजूदा डेटा नहीं बदलेगा।
- 1. उत्पादन डेटाबेस में कॉलम डेटा प्रकार बदलें
- 2. प्रकार एक एसक्यूएल तालिका
- 3. डेटा खोने के बिना कॉलम प्रकार बदलें
- 4. एक MySQL तालिका कॉलम
- 5. Sybase में किसी तालिका के मौजूदा कॉलम प्रकार को कैसे बदलें?
- 6. किसी तालिका में एक कॉलम में एकाधिक कॉलम में किसी अन्य तालिका में एक कॉलम में शामिल होना
- 7. किसी तालिका तालिका के फ़ील्ड मानों के साथ SQL तालिका के कॉलम का नाम बदलें
- 8. कॉलम बनाम बदलें कॉलम
- 9. तालिका में एन्क्रिप्ट कॉलम
- 10. तालिका बदलें तो
- 11. एक विशाल 150 एम-पंक्ति MySQL तालिका उत्पन्न करना
- 12. बदलें तालिका और कॉलम नाम मैपिंग्स इकाई फ्रेमवर्क v4.3
- 13. एमएस एक्सेस MySQL रूपांतरण सहायता (विशाल तालिका)
- 14. अन्य तालिका में एक और कॉलम चुनकर एक कॉलम में डालें लेकिन दूसरा कॉलम
- 15. किसी तालिका से एक कॉलम से एक कॉलम में एकाधिक कॉलम में शामिल हों
- 16. इकाई फ्रेमवर्क कोड प्रथम - बदलें तालिका कॉलम संयोजन
- 17. grails में प्राथमिक कुंजी कॉलम कैसे बदलें?
- 18. एक विशाल उत्पादन तालिका से डेटा कॉपी करना
- 19. MySQL तालिका या कॉलम के लिए टिप्पणी जोड़ें या बदलें?
- 20. डेटा को एक कॉलम से दूसरे कॉलम में कॉपी करें (जो एक अलग तालिका में है)
- 21. MySQL तालिका को पुनर्निर्मित किए बिना कॉलम नाम बदलें
- 22. sqlite3 बदलें कॉलम डिफ़ॉल्ट मान
- 23. Excel में आवृत्तियों की एक तालिका को एक कॉलम में
- 24. एक विशाल बिटमैप
- 25. एक तालिका पंक्ति इस प्रकार भी तालिका पंक्तियों में यह
- 26. तालिका शीर्षलेख का नाम बदलें
- 27. तालिका में छुपा कॉलम जावास्क्रिप्ट
- 28. अपनी टाइप परिभाषा को दोहराने के बिना mysql तालिका में एक कॉलम का नाम बदलें
- 29. बड़ी तालिका में कॉलम के डेटा प्रकार को बदलना। प्रदर्शन के मुद्दों
- 30. कॉलम परिवर्तन डेटा प्रकार
क्या आप समझा सकते हैं कि आप डेटा प्रकार को किस प्रकार से बदल रहे हैं? –
मैं नहीं देख सकता कि कॉलम प्रकार बदलने के लिए आप कर्सर का उपयोग कैसे कर सकते हैं? एक कॉलम प्रकार किसी तालिका में _all_ मानों में परिवर्तन होता है। – Oded
ints bigints – user1417408