কোন DBMS আমি জানি কোন "অপ্টিমাইজেশান" একটি করতে হবে যে হয়েছে VARCHARএকটি সঙ্গে 2^nদৈর্ঘ্য একটি সঙ্গে এক বেশী ভালো সঞ্চালন maxদৈর্ঘ্য যে 2 একটি ক্ষমতা নয়।
আমার মনে হয় প্রারম্ভিক এসকিউএল সার্ভার সংস্করণগুলি VARCHARউচ্চতর দৈর্ঘ্যের চেয়ে 255 দৈর্ঘ্যের সাথে আলাদাভাবে আচরণ করেছে । আমি এখনও জানি না এটি এখনও আছে কিনা।
প্রায় সমস্ত ডিবিএমএসের জন্য, প্রকৃত সঞ্চয়স্থানটি কেবলমাত্র আপনি নির্দিষ্ট করা maxদৈর্ঘ্যের দ্বারা নয় তবে এটির মধ্যে নির্দিষ্ট অক্ষরের সংখ্যা দ্বারা নির্ধারিত হয় । সুতরাং স্টোরেজ দৃষ্টিকোণ থেকে (এবং সম্ভবত একটি পারফরম্যান্সও এক), আপনি কোনও কলামকে হিসাবে ঘোষণা করেন কিনা তাতে কোনও তাত্পর্য হয় VARCHAR(100)না VARCHAR(500)।
আপনার maxকোনও VARCHARকলামের জন্য প্রযুক্তিগত / শারীরিক জিনিস না দিয়ে এক ধরণের বাধা (বা ব্যবসার নিয়ম) হিসাবে দেওয়া দৈর্ঘ্যটি দেখতে হবে ।
পোস্টগ্রেএসকিউএল-র জন্য সর্বোত্তম সেটআপ হ'ল textদৈর্ঘ্যের সীমাবদ্ধতা ছাড়াই ব্যবহার করা এবং এটি CHECK CONSTRAINTআপনার ব্যবসায়ের যা প্রয়োজন তার অক্ষরের সংখ্যা সীমাবদ্ধ করে।
যদি সেই প্রয়োজনীয়তা পরিবর্তিত হয়, চেক সীমাবদ্ধতা পরিবর্তন টেবিল পরিবর্তন করার চেয়ে অনেক দ্রুত (কারণ টেবিলটি পুনরায় লেখার প্রয়োজন নেই)
একই ওরাকল এবং অন্যদের জন্য প্রয়োগ করা যেতে পারে - ওরাকল এ এটি VARCHAR(4000)পরিবর্তে হবে text।
আমি জানি না যে এসকিউএল সার্ভারে VARCHAR(max)এবং উদাহরণস্বরূপ কোনও শারীরিক স্টোরেজ পার্থক্য রয়েছে কিনা VARCHAR(500)। varchar(max)তুলনায় তুলনামূলকভাবে ব্যবহার করার সময় কার্যত প্রভাব রয়েছে varchar(8000)।
এই লিঙ্কটি দেখুন (একটি মন্তব্য হিসাবে এরউইন ব্র্যান্ডস্টেটর পোস্ট করেছেন)
2013-09-22 সম্পাদনা করুন
বিগাউন এর মন্তব্য সম্পর্কে:
Postgres ইন সংস্করণ সামনে 9.2 (যা আমি যখন প্রাথমিক উত্তর লিখেছে উপলব্ধ ছিল না) কলাম সংজ্ঞা পরিবর্তন করেনি পুরো টেবিল পুনর্লিখন, যেমন দেখতে এখানে । 9.2 যেহেতু এটি আর কেস নয় এবং একটি দ্রুত পরীক্ষা নিশ্চিত করেছে যে 1.2 মিলিয়ন সারি সহ একটি টেবিলের জন্য কলামের আকার বাড়ানো মাত্র 0.5 সেকেন্ডে নিয়েছে।
ওরাকল-এর ক্ষেত্রে এটিও সত্য বলে মনে হয়, বড় টেবিলের varcharকলামটি পরিবর্তন করতে যে সময় লাগে তা বিচার করে । তবে আমি এর জন্য কোনও রেফারেন্স পাইনি।
মাইএসকিউএল-এর জন্য ম্যানুয়ালটি " বেশিরভাগ ক্ষেত্রে, ALTER TABLEমূল টেবিলটির অস্থায়ী অনুলিপি তৈরি করে " বলে। এবং আমার নিজের পরীক্ষাগুলি এটি নিশ্চিত করে: ALTER TABLEএকটি কলামের আকার বাড়াতে 1.2 মিলিয়ন সারি (পোস্টগ্রিসের সাথে আমার পরীক্ষার মতো) একটি টেবিলে একটি চালানো 1.5 মিনিট সময় নিয়েছিল। মাইএসকিউএলে আপনি কোনও কলামে অক্ষরের সংখ্যা সীমাবদ্ধ করতে একটি চেক সীমাবদ্ধতা ব্যবহার করতে "ওয়ার্কআরআন্ড" ব্যবহার করতে পারবেন না ।
এসকিউএল সার্ভারের জন্য আমি এ সম্পর্কে একটি পরিষ্কার বিবৃতি খুঁজে পাইনি তবে varcharকলামের আকার বাড়াতে কার্যকর করার সময় (উপরে থেকে আবার 1.2 মিলিয়ন সারি টেবিল) ইঙ্গিত দেয় যে কোনও পুনর্লিখন ঘটে না ।
2017-01-24 সম্পাদনা করুন
মনে হয় এসকিউএল সার্ভার সম্পর্কে আমি (কমপক্ষে আংশিক) ভুল ছিলাম। অ্যারন বারট্রান্ডের এই উত্তরটি দেখুন যা দেখায় যে একটি nvarcharবা varcharকলামগুলির ঘোষিত দৈর্ঘ্য পারফরম্যান্সের জন্য একটি বিশাল পার্থক্য করে।