मैंने हाल ही में एक तालिका में एक NULL-सक्षम बिट कॉलम जोड़ा है जिसमें 500 मिलियन पंक्तियाँ हैं। स्तंभ पर कोई डिफ़ॉल्ट नहीं है, हालांकि सभी आवेषण 0 या 1 के मान को निर्दिष्ट कर रहे हैं, और मैंने सभी मौजूदा पंक्तियों को (छोटे बैचों में पंक्तियों को अपडेट करते हुए) 0 या 1 को असाइन करने के लिए एक बार की दिनचर्या चलाई है। प्रत्येक पंक्ति में अब उस कॉलम में 0 या 1 होना चाहिए।
मैं बिट कॉलम को गैर-अशक्त बनाना चाहता हूं, लेकिन जब मैंने ऐसा करने की कोशिश की ALTER TABLE t1 ALTER COLUMN c1 bit not null, तो यह 3 मिनट के लिए चलना शुरू हो गया और मैंने इसे रोक दिया क्योंकि यह सभी रीडिंग को टेबल पर रोक रहा था और मुझे संदेह था कि इसे पूरा करने में एक लंबा समय लगने वाला था। । यह संभव है कि इसमें बहुत अधिक समय नहीं लगेगा लेकिन मैं बहुत अधिक अनुपलब्धता का जोखिम नहीं उठा सकता। रोलबैक में स्वयं 6 मिनट लगे।
क्या आपके पास कोई सुझाव है कि कैसे मैं कॉलम को बिना अशक्त बना सकता हूं, इसे पूरा करने के लिए संभावित घंटे लेने के बिना? इसके अतिरिक्त, इस बात का अनुमान लगाने का कोई तरीका है कि ALTER TABLE ALTER COLUMNमैंने कितने समय के लिए वक्तव्य शुरू किया और फिर रद्द कर दिया गया?
मैं SQL Server 2017 वेब संस्करण का उपयोग कर रहा हूं।
SELECT c1, count(*) FROM t1 GROUP BY c1जिसे चलाने में लगभग 9 मिनट लगे। इसकेALTER TABLE ALTER COLUMNबाद का वास्तविक विवरण पूरा होने में 25 मिनट का समय लगा। इतना भी बेकार नहीं।