বেশিরভাগ পরিস্থিতিতে আপনার চর কলামের মতো ভার্চর কলামটি দেখার চেষ্টা করা উচিত এবং দৈর্ঘ্যটি রক্ষণশীলভাবে সেট করা উচিত। আপনাকে সর্বদা ভেরিফাইফায়ার সম্পর্কে এতদূর ভাবতে হবে না যে এমন কিছু যা আপনার দৈর্ঘ্যের উপর নির্ভর করে আপনার সিদ্ধান্তকে প্রভাবিত করে। এটিকে সত্যিকার অর্থে পারফরম্যান্সের ইঙ্গিত হিসাবে দেখা উচিত যে সরবরাহ করা স্ট্রিংগুলি বিভিন্ন দৈর্ঘ্যের হবে।
এটি কোনও নির্দেশ নয় যা ডাটাবেস ইন্টার্নালদের কঠোরভাবে অনুসরণ করতে হবে, এটি সম্পূর্ণ উপেক্ষা করা যায়। যদিও এর সাথে কখনও কখনও বাস্তবায়ন ফাঁস হতে পারে (যেমন নির্দিষ্ট দৈর্ঘ্য এবং প্যাডিং উদাহরণস্বরূপ) যদিও এটি কোনও আদর্শ বিশ্বে না হওয়া উচিত care
আপনার যদি একটি ভার্চার (255) থাকে তবে আপনার কোনও গ্যারান্টি নেই যে পারফরম্যান্স অনুযায়ী এটি সর্বদা সমস্ত ক্ষেত্রে একটি চর (255) এর সাথে আলাদাভাবে আচরণ করবে।
স্টোরেজের প্রয়োজনীয়তা সম্পর্কে ম্যানুয়ালটিতে দেওয়া পরামর্শের সাথে এটি ইনলাইন হিসাবে 255, 65535 ইত্যাদির মতো সেট করা সহজ বলে মনে হচ্ছে। এটি এই ধারণাটি দেয় যে 0 (হ্যাঁ, এটি একটি জিনিস) এবং 255 এর মধ্যে যে কোনও মান একই প্রভাব ফেলবে। তবে এটি এমন কিছু নয় যা পুরোপুরি গ্যারান্টিযুক্ত হতে পারে।
স্টোরের প্রয়োজনীয়তাগুলি সত্য হতে বা সারি স্টোরেজের ক্ষেত্রে শালীন এবং পরিপক্ক ধ্রুবক স্টোরেজ ইঞ্জিনগুলির জন্য একটি ভাল সূচক থাকে। এটি সূচকের মতো জিনিসের পক্ষে শক্তিশালী সূচক নয়।
এটি কখনও কখনও একটি কঠিন প্রশ্ন, ঠিক কতক্ষণ স্ট্রিংয়ের টুকরোটি এটি সর্বোচ্চ বেঁধে স্থাপন করা উচিত আপনি জানেন যে এটির মধ্যে থাকা উচিত তবে এর কোনও প্রভাব নেই। দুর্ভাগ্যক্রমে এটি প্রায়শই ব্যবহারকারীর কাজ করার জন্য ছেড়ে যায় এবং এটি কিছুটা নির্বিচারে। আপনি সত্যই কখনই স্ট্রিংকে বড় করতে পারবেন না কারণ এমন ঘটনাও ঘটতে পারে যেখানে আপনি ঠিক নিশ্চিত নন।
আপনার নিশ্চিত করা উচিত যে মাইএসকিউএল অনুসন্ধানগুলি যখন একটি স্ট্রিংটি কাটা কাটার চেয়ে খুব দীর্ঘ হয় তখন ত্রুটি ছুঁড়ে দেয় যাতে কমপক্ষে আপনি জানেন যে এটি ত্রুটি নির্গমন থেকে খুব কম হতে পারে। কলামগুলি বড় বা সঙ্কুচিত করতে পুনরায় আকার দেওয়া একটি ব্যয়বহুল ডিডিএল অপারেশন হতে পারে, এটি মনে রাখা উচিত।
দৈর্ঘ্য এবং পারফরম্যান্স খেলতে আসে যেখানে অক্ষর সেটটিও বিবেচনা করা উচিত। দৈর্ঘ্য বাইটের চেয়ে এটি বোঝায়। উদাহরণস্বরূপ, utf8 ব্যবহার করে যদি (এমবি 4 নয়) তবে বর্ণচর (255) সত্যিই ভের্বাইনারি (3 * 255)। পরীক্ষাগুলি না চালিয়ে এবং সোর্স কোড / ডকুমেন্টেশনের গভীরভাবে অনুসন্ধান না করে কীভাবে এই জাতীয় জিনিসগুলি সত্যই কার্যকর হবে তা জানা শক্ত। এ কারণে অপ্রত্যাশিতভাবে স্ফীত প্রভাব পড়ার অতিরিক্ত দৈর্ঘ্যের সুযোগ রয়েছে। এটি কেবল পারফরম্যান্সে প্রযোজ্য নয়। যদি আপনার একদিন ভার্চর কলামের চরিত্রের সেটটি আরও বড় আকারে পরিবর্তন করতে হয় তবে আপনি যদি কৃত্রিমভাবে দীর্ঘ স্ট্রিংগুলি উপস্থিত থাকতে দিতেন তবে এড়ানো যেত। এটি সাধারণত একটি মোটামুটি কুলুঙ্গির সমস্যা তবে এটি উঠে আসে,
যদি দেখা যায় যে MAX (LENGTH (কলাম)) সর্বদা <64 থাকে (যেমন যদি সিদ্ধান্ত নেওয়া হয়েছিল যে ইনপুটটির কোনও সীমা থাকবে যা কলাম সংজ্ঞা অনুসারে মেলেনি) তবে আপনার ভারচার (255) আছে তবে আপনি কিছু পরিস্থিতিতে প্রয়োজনের চেয়ে চারগুণ বেশি জায়গা ব্যবহার করবেন এমন ভাল সুযোগ।
এর মধ্যে অন্তর্ভুক্ত থাকতে পারে:
- বিভিন্ন ইঞ্জিন, কেউ কেউ এটিকে পুরোপুরি উপেক্ষা করতে পারে।
- বাফার আকারগুলি, উদাহরণস্বরূপ আপডেট বা সন্নিবেশ করানোর জন্য পুরো 255 বরাদ্দ করতে হতে পারে (যদিও আমি এটি প্রমাণ করার জন্য উত্স কোডটি পরীক্ষা করে দেখিনি, এটি কেবল একটি অনুমানমূলক)।
- সূচকগুলি, যদি আপনি প্রচুর ভার্চার (255) কলামগুলি থেকে একটি সংমিশ্রিত কী তৈরি করার চেষ্টা করেন তবে তা অবিলম্বে স্পষ্ট হবে।
- অন্তর্বর্তী সারণী এবং সম্ভবত ফলাফল সেট। লেনদেনগুলি যেভাবে কাজ করে তা দেওয়া, নির্ধারিত সীমাটির বিপরীতে কোনও কলামে সত্যিকারের সর্বোচ্চ দৈর্ঘ্যের স্ট্রিং ব্যবহার করা কোনও ক্ষেত্রে সর্বদা সম্ভব না।
- অভ্যন্তরীণ ভবিষ্যদ্বাণীমূলক অপ্টিমেশনগুলি ইনপুট হিসাবে সর্বাধিক দৈর্ঘ্য নিতে পারে।
- ডাটাবেস বাস্তবায়ন সংস্করণে পরিবর্তন।
থাম্বের একটি নিয়ম হিসাবে, কোনও বার্চারের যেভাবেই হওয়া দরকার তার চেয়ে বেশি দীর্ঘায়নের প্রয়োজন নেই, পারফরম্যান্সের সমস্যাগুলি বা না তাই আমি যখন আপনি এটি করতে পারেন তার সাথে লেগে থাকার পরামর্শ দিই। আপনার ডেটার আকারের নমুনার জন্য আরও প্রচেষ্টা করা, একটি সত্য সীমা প্রয়োগ করা বা জিজ্ঞাসা / গবেষণার মাধ্যমে সত্য সীমাটি সন্ধান করা আদর্শ পদ্ধতির।
আপনি যখন পারবেন না, যদি সন্দেহের ক্ষেত্রে আপনি যদি ভারচার (255) এর মতো কিছু করতে চান তবে আমি বিজ্ঞানটি করার পরামর্শ দিই। এটিতে টেবিলটিকে নকল করে, ভ্যার চর কলামের আকার হ্রাস করে তারপরে ডাটাটি মূল থেকে অনুলিপি করে এবং সূচি / সারির তথ্যের আকারের দিকে তাকিয়ে থাকতে পারে (পাশাপাশি কলামটিও সূচী করে এটি প্রাথমিক কী হিসাবে চেষ্টা করুন) প্রাথমিক কী দ্বারা সারিগুলি অর্ডার করা হওয়ায় InnoDB এ অন্যরকম আচরণ করতে পারে)। খুব কমপক্ষে এই পথে আপনি জানতে পারবেন আপনার আইও-তে কোনও প্রভাব রয়েছে যা সবচেয়ে সংবেদনশীল বাধা হয়ে থাকে। মেমরির ব্যবহারের জন্য পরীক্ষা করা আরও কঠিন, সম্পূর্ণরূপে এটি পরীক্ষা করা শক্ত। আমি সম্ভাব্য সবচেয়ে খারাপ ক্ষেত্রে (মেমরির ফলাফলগুলিতে মধ্যবর্তী প্রচুর পরিমাণের প্রশ্নগুলি, বড় টেম্প টেবিলগুলির জন্য ব্যাখ্যা সহ চেক ইত্যাদি) পরীক্ষা করার পরামর্শ দেব।
আপনি যদি জানেন যে টেবিলটিতে অনেকগুলি সারি থাকবে না, আপনি যোগদান করে, সূচীগুলি (বিশেষত সংমিশ্রিত, অনন্য), ইত্যাদির জন্য কলামটি ব্যবহার করবেন না তবে সম্ভবত আপনার খুব সমস্যা হবে না।
VARCHAR(255) utf8mb4
11.5MB পরিমাপকৃত একক ইনডেক্স কলাম সহ 150 ডলার সারি সহ একটি টেবিল ।VARCHAR(48) utf8mb4
একই ডেটা (সর্বাধিক দৈর্ঘ্যের 46 অক্ষর) সহ সূচিযুক্ত কলামযুক্ত একটি টেবিল 4.5MB ব্যবহৃত হয়েছে। প্রশ্নগুলির মধ্যে আসলে কোনও বড় পার্থক্য নয়, এটি সূচকযুক্ত। তবে এটি ক্যোয়ারী I / O এবং ডেটাবেস ব্যাকআপের মতো জিনিস যুক্ত করে।