एक नवरचचर कॉलम का आकार बदलते समय, क्या मुझे अद्वितीय सूचकांक को छोड़ने की आवश्यकता है? और क्या सूचकांक को पुन: बनाने पर तालिका बंद हो जाएगी?


14

हमारे डेटाबेस में एक बड़ी तालिका मौजूद है जो कमोबेश इस तरह दिखती है:

CREATE TABLE dbo.production_data
(
    pd_id BIGINT PRIMARY KEY,
    serial NVARCHAR(16) NOT NULL UNIQUE,
    ...
);

लेकिन अब धारावाहिक क्षेत्र का आकार कम हो गया है, इसलिए मैं इसे 32 में बदलना चाहता हूं। विज़ुअल स्टूडियो स्कीमा तुलना उपकरण द्वारा यह करने की सलाह देता है:

DROP INDEX ux_production_data_serial ON dbo.production_data;
GO
ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL;
GO
CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC);

क्या वाकई इसकी जरूरत है? या ऐसा करने का एक अल्ट्रा सेव तरीका अधिक है?

इसके अलावा जब अद्वितीय सूचकांक को फिर से बनाया जाता है, तो क्या मेरी टेबल लॉक हो जाएगी? क्योंकि यह एक बड़ी समस्या होगी (क्योंकि तालिका में 30 मिलियन पंक्तियाँ हैं और मुझे लगता है कि सूचकांक को फिर से बनाने में काफी समय लगेगा), क्योंकि भविष्य में अगली रखरखाव खिड़की कुछ महीने है। मेरे विकल्प क्या हैं?

जवाबों:


24

सूचकांक को छोड़ने और पुन: बनाने की कोई आवश्यकता नहीं है।

महज प्रयोग करें

ALTER TABLE dbo.production_data
  ALTER COLUMN serial NVARCHAR(32) NOT NULL; 

यह एक मेटाडेटा केवल परिवर्तन है।

से एक कॉलम में फेरबदल NVARCHAR(16)करने के लिए NVARCHAR(32)सभी को एक संग्रहण प्रभावित नहीं होता।

(से इसका उल्टा जा रहे हैं NVARCHAR(32)करने के लिए NVARCHAR(16)) आप वस्तुओं स्तंभ पर निर्भर होने के बारे में एक त्रुटि दे, हालांकि इतना हो सकता है दृश्य स्टूडियो बस हमेशा की जाँच है कि क्या यह है के एवज में कि बायलर प्लेट कोड उत्पन्न होगा वास्तव में आवश्यकता है।


2
जिज्ञासु क्यों विजुअल स्टूडियो इसे DROP / CREATE INDEX के रूप में लिखता है। शायद अनावश्यक, बिना शर्त CYA।
हारून बर्ट्रेंड

2
@AaronBertrand - मुझे लगता है कि यह उन मामलों के लिए एक लापता अनुकूलन है जहाँ इसकी आवश्यकता नहीं है। पुस्तकों ने ऑनलाइन संकेत दिया कि कुछ मामलों में इसकी आवश्यकता थी, जहां उत्पाद को वास्तव में इस अद्यतन तक
मार्टिन स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.