একটি বৃহত টেবিলের উপর ভর্চার কলামের আকার বাড়ানোর পরে কোনও সমস্যা হতে পারে?


87

আমি এসকিউএল সার্ভার ২০০৮ ব্যবহার করছি এবং প্রায় ৫০০ কিলো সারি সহ একটি টেবিলে (২০০ থেকে 1200) অবধি আমার একটি ভিচারার ফিল্ডটি আরও বড় করা দরকার। আমার যা জানা দরকার তা হ'ল যদি আমি বিবেচনা না করে থাকি এমন কোনও সমস্যা থাকে।

আমি এই টিএসকিউএল বিবৃতিটি ব্যবহার করব:

ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)

আমি ইতিমধ্যে এটি ডেটার অনুলিপিটিতে চেষ্টা করেছি এবং এই বিবৃতিটির কোনও খারাপ প্রভাব আমি দেখতে পেলাম না।

সুতরাং এটি করা থেকে কোনও সম্ভাব্য সমস্যা রয়েছে যা আমি বিবেচনা না করে থাকতে পারি?

যাইহোক, কলামটি সূচিযুক্ত নয়।


4
@ ননব: এটি একটি ভয়ঙ্কর ধারণা। stackoverflow.com/q/2091284/27535
gbn

জাস্টিনের এই প্রশ্নের উত্তর সম্পর্কে @ জিবিএন কি কোনও ধারণা? আপনার নিজের সাথে কিছুটা মতবিরোধ রয়েছে বলে মনে হচ্ছে।
আকাশম

@ আকাশম: তিনি স্টোরেজ সম্পর্কে সঠিক তবে এটি একটি ওভারহেড, অপটিমাইজেশন নয়। এখন এই পড়া stackoverflow.com/q/2009694/27535
gbn

@ জিবিএন - সূচক সম্পর্কে মার্টিন স্মিথের পর্যবেক্ষণ যেমনটি ঠিক তেমন পয়েন্ট। প্রত্যাহার।
স্টুয়ার্টলসি

4
শেষ পর্যন্ত দেখা গেল সেখানে একটা গোছা! ক্ষেত্রটি সূচিত করা হয়েছিল, এবং কেউ যখন 900b এর চেয়ে বড় এন্ট্রি প্রবেশের চেষ্টা করেছিল তা ব্যর্থ হয়! সতর্কাবস্থা.
পল টি ডেভিস

উত্তর:


59

এটি কেবলমাত্র একটি মেটাডেটা পরিবর্তন: এটি দ্রুত।

একটি পর্যবেক্ষণ: "দুর্ঘটনা" এড়ানোর জন্য NULL উল্লেখ করুন বা স্পষ্টরূপে NULL নির্দিষ্ট করুন না যদি কোনও SET ANSI_xx সেটিংস আলাদা হয় যেমন কোনও কারণে এসএসএমএস নয় বরং এসএসএল-তে চালানো হয়


4
এটি দিয়ে সব ঠিক হয়ে গেল। কোন সমস্যা নাই.
পল টি ডেভিস

আপনি কি জানেন যে যখন একই নিয়মগুলি প্রয়োগ হয় তখন থেকে varchar(200)যায় varchar(max)?
কোডনেকেড

@ কোডনেকেড: এটি উত্তর দেওয়ার জন্য অনেক জটিল। (সর্বাধিক) হ'ল একটি এলওবি টাইপ যা "সারি" বা সারিটির বাইরে থাকতে পারে। তবে, আমি বলতে চাইছি এটি একই হওয়া উচিত কারণ ডেটা ইতিমধ্যে "সারিতে" রয়েছে এবং কোনও টেবিল পুনর্নির্মাণের প্রয়োজন হবে না
gbn

12

আমি কেবল আমার 2 সেন্ট যুক্ত করতে চেয়েছিলাম, যেহেতু আমি এই প্রশ্নটি খ / সি করিয়েছি আমি নিজেকে একই পরিস্থিতিতে পেয়েছি ...

সচেতন হতে যখন থেকে পরিবর্তন varchar(xxx)করতে varchar(yyy)প্রকৃতপক্ষে একটি মেটা-ডেটা পরিবর্তন হয়, কিন্তু পরিবর্তন varchar(max)হয় না। কারণ varchar(max)মানগুলি (ওরফে বিএলওবি মান - চিত্র / পাঠ্য ইত্যাদি) ডিস্কে আলাদাভাবে সংরক্ষণ করা হয়, কোনও টেবিলের সারিটির মধ্যে নয়, "সারির বাইরে"। সুতরাং সার্ভারটি একটি বড় টেবিলে বাদাম হয়ে যাবে এবং কয়েক মিনিট (ঘন্টা) এর জন্য প্রতিক্রিয়াহীন হয়ে উঠবে।

--no downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200)

--huge downtime
ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)

পুনশ্চ. একই nvarcharবা কোর্সে প্রযোজ্য ।


4

ভারচর (২০০০০) থেকে ভারচর (১২০০) পরিবর্তন করা আপনার সমস্যার কারণ হতে পারে না কারণ এটি কেবলমাত্র একটি মেটাডেটা পরিবর্তন এবং এসকিউএল সার্ভার ২০০৮ অত্যধিক ফাঁকা ফাঁকা স্থানগুলি কেটে ফেললে আপনার কোনও পারফরম্যান্সের পার্থক্য দেখতে পাওয়া উচিত নয় সংক্ষেপে এটি তৈরির সাথে কোনও সমস্যা হওয়া উচিত নয় পরিবর্তন.


আমি বিশ্বাস করি এটি ছোট টেবিলগুলির জন্য সত্য হতে পারে, তবে সক্রিয়ভাবে জিজ্ঞাসা করা বড় টেবিলগুলির জন্য এটি একটি উল্লেখযোগ্য পরিমাণে অবরুদ্ধ হতে পারে (এসকিউএল সার্ভারের এটি প্রতিটি সারিতে কাটানোর প্রয়োজন কিনা তা দেখতে হবে)।
কোডনেকেড

0

আপনার কলামটি ভারচর (সর্বাধিক) রূপান্তর করা এড়ানো উচিত এর অন্য একটি কারণ হ'ল আপনি ভার্চার (সর্বাধিক) কলামে সূচি তৈরি করতে পারবেন না।


-3

আমার ক্ষেত্রে পরিবর্তিত কলাম কাজ করছে না তাই কেউ 'মডিফাই' কমান্ড ব্যবহার করতে পারে, যেমন:

টেবিল পরিবর্তন করুন [টেবিলের নাম] মোডিফ কলাম [কলাম_নাম] বার্তা (1200);


4
কারণ আপনি প্রতিটি প্রশ্নে এসকিউএল সার্ভার ব্যবহার করছেন না (তবে মাইএসকিউএল সম্ভবত)। "ALTER TABLE ... MODIFY" বৈধ টি-এসকিউএল নয়।
জেরোইন মোস্টার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.