এনভারচর কলামের আকার পরিবর্তন করার সময়, আমার কি অনন্য সূচকটি ফেলে দেওয়া দরকার? এবং সূচীটি পুনরায় তৈরি করার সময় কি টেবিলটি তালাবন্ধ হয়ে যাবে?


14

আমাদের ডাটাবেসে একটি বড় টেবিল উপস্থিত রয়েছে যা কম বেশি দেখায়:

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

তবে এখন সিরিয়াল ক্ষেত্রটির আকার হ্রাস পেয়েছে, তাই আমি এটিকে 32-এ পরিবর্তন করতে চাই Vis

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 হিসাবে স্ক্রিপ্ট করে। সম্ভবত অপ্রয়োজনীয়, নিঃশর্ত সিওয়াইএ।
অ্যারন বারট্রান্ড

2
@ অ্যারোনবার্ট্র্যান্ড - আমি মনে করি যে এটির ক্ষেত্রে এটির প্রয়োজন নেই কেবলমাত্র এটি অপরিহার্য। অনলাইন বইগুলি ইঙ্গিত করেছে যে কয়েকটি ক্ষেত্রে যেখানে এটির প্রয়োজন ছিল সেখানে আপডেট হওয়া পর্যন্ত
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.