একটি খালি কলাম মানটি কি ভরাট কলাম মান হিসাবে একই সঞ্চয়স্থান স্থান দখল করে?


16

আমার কাছে 2 টি কলাম সহ একটি টেবিল রয়েছে। উভয় কলামের ধরণ সেট করা আছে varchar(38)। যদি আমি কলামগুলির মধ্যে একটির জন্য খালি মান সহ একটি সারি তৈরি করি, মানটি শূন্য না থাকায় এটি কি একই স্টোরেজ স্পেস নেবে?

অন্য কথায়, যখন একটি সারি তৈরি হবে তখন কি মাইএসকিউএল কলামটির (তার ধরণের উপর নির্ভর করে) স্টোরেজ স্থান সংরক্ষণ করবে?

উত্তর:


11

থেকে InnoDB শারীর সারি গঠন, bulletpoint # 7 অপ্রয়োজনীয় ROW_FORMAT অধীনে

একটি এসকিউএল NULL মান রেকর্ড ডিরেক্টরিতে এক বা দুটি বাইট সংরক্ষণ করে। তদ্ব্যতীত, একটি এসকিউএল NULL মান একটি পরিবর্তনশীল দৈর্ঘ্যের কলামে সঞ্চিত থাকলে রেকর্ডের ডেটা অংশে শূন্য বাইট সংরক্ষণ করে । একটি নির্দিষ্ট দৈর্ঘ্যের কলামে, এটি রেকর্ডের ডেটা অংশে কলামের নির্দিষ্ট দৈর্ঘ্য সংরক্ষণ করে। NULL মানগুলির জন্য নির্ধারিত স্থান সংরক্ষণের মাধ্যমে সূচী পৃষ্ঠার খণ্ডিতকরণ ব্যতীত NOLL থেকে কলামের একটি অ-NULL মান আপডেট করা সম্ভব value

থেকে InnoDB শারীর সারি গঠন, bulletpoint # 2 কম্প্যাক্ট ROW_FORMAT অধীনে

রেকর্ড শিরোনামের পরিবর্তনশীল দৈর্ঘ্যের অংশে NULL কলামগুলি ইঙ্গিত করার জন্য কিছুটা ভেক্টর রয়েছে। সূচীতে কলামগুলির সংখ্যা যেটি NULL হতে পারে সেগুলি N হয়, বিট ভেক্টরটি CEILING (N / 8) বাইট দখল করে । (উদাহরণস্বরূপ, যদি সেখানে 9 থেকে 15 টি কলাম যে শূন্য হতে পারে থেকে যে কোন জায়গায় হয়, বিট ভেক্টর দুই বাইট ব্যবহার করে।) কলাম যে শূন্য এই ভেক্টর মধ্যে বিট ছাড়া অন্য স্থান ব্যাপৃত না । শিরোনামের পরিবর্তনশীল-দৈর্ঘ্যের অংশেও ভেরিয়েবল-দৈর্ঘ্যের কলামগুলির দৈর্ঘ্য রয়েছে। কলামের সর্বোচ্চ দৈর্ঘ্যের উপর নির্ভর করে প্রতিটি দৈর্ঘ্য এক বা দুটি বাইট নেয় tes যদি সূচকের সমস্ত কলামগুলি শূন্য না হয় এবং একটি নির্দিষ্ট দৈর্ঘ্য থাকে, রেকর্ড শিরোনামের কোনও পরিবর্তনশীল-দৈর্ঘ্যের অংশ নেই has

এই বুলেটপয়েন্টগুলির উপর ভিত্তি করে, এখানে NULLএকটি কলামের সঞ্চয়স্থানের জন্য একটি মান লাগে

  • ভেরিয়েবলের দৈর্ঘ্য: একটি নুল মান সারিটিতে কোনও সঞ্চয়স্থান গ্রহণ করে না
  • নির্দিষ্ট দৈর্ঘ্য: সংরক্ষিত স্থান নেয়

প্রথম পয়েন্টটি কী প্রকাশ করেছে তার জন্য এখন আপনাকে অবশ্যই CHAR এবং VARCHAR ব্যবহারের মধ্যে সিদ্ধান্ত নিতে হবে

NULL মানগুলির জন্য নির্ধারিত স্থান সংরক্ষণের মাধ্যমে সূচী পৃষ্ঠার খণ্ডিতকরণ ব্যতীত NOLL থেকে কলামের একটি আপডেট করা হবে একটি নন- NULL মান জায়গায় করা

এটি নন-এনইউএলএল ডেটা সঞ্চয় হয়ে যাওয়ার পরে রাস্তায় নামার কোনও সারিটির কোনও ভাঙন রোধ করতে পারে। এটি মাইআইএসএএম-এর প্রতি আমি আগে আলোচনা করেছি: আমার পুরাতন পোস্টটি দেখুন একটি স্থির-আকারের ক্ষেত্রের মধ্যে CHAR বনাম V মার্চআরএআর ব্যবহারের পারফরম্যান্স প্রভাবটি কী?


হাই রোল্যান্ডো, আমি উল্লেখ করতে ভুলে গিয়েছিলাম এমন আরও একটি আইটেম ছিল, একটি বর্ণচর (5) এবং বার্চার (100) ধরণের ঘোষণার মধ্যে মেমরির বরাদ্দের পার্থক্য। বা সত্যিই অতিরিক্ত বরাদ্দ দ্বারা দণ্ডিত।
ক্রেগ ইফ্রেইন

@ ক্রেইগএফরেইন আপনার উত্তরটিতে অবশ্যই স্পষ্টভাবে মেমরি বরাদ্দ যুক্ত করা উচিত। (
বিটিডব্লিউ

1
অতিরিক্ত বরাদ্দ দেওয়ার জন্য জরিমানা ঘটে যখন আপনার কোনও জটিল থাকে SELECTযা একটি টেম্প টেবিল তৈরি করতে হবে। যদি সম্ভব হয়, এটিকে ব্যবহার করবেন MEMORY, এবং রূপান্তর VARCHARকরার CHARtmp, টেবিল জন্য। এখন VARCHAR(100)একটি স্থির 100 (বা 300) বাইট লাগে, এটি সম্ভবত কোয়েরিটি ধীর করে দেয়।
রিক জেমস

@ রোল্যান্ডোমাইএসকিউএলডিবিএ, আচরণটি কি মাইএসকিএল ৫.7 ডায়ানামিক এবং সংযোগ সারির ফর্ম্যাটগুলির জন্য প্রযোজ্য আপনার উত্তরে বর্ণিত হয়েছে?
দিনেশ কুমার

@ দিনেশকুমার এই অনুচ্ছেদগুলি এখনও 5.7 / 8.0 ডক্সে রয়েছে। DYNAMIC এর জন্য দয়া করে dev.mysql.com/doc/refman/5.7/en/innodb-row-format-dynamic.html দেখুন
RolandoMySQLDBA

8

আপনি আপনার ভারচার কলামটির জন্য যে দৈর্ঘ্য নির্ধারণ করেছেন তা নির্বিশেষে, খালি কলাম দ্বারা ব্যবহৃত সঞ্চয় স্থান একই হবে।

CHAR এবং VARCHAR প্রকারগুলি

এখানে চিত্র বর্ণনা লিখুন

এটি কেবল ভারচর কলাম দ্বারা ব্যবহৃত স্থানটিকে সম্বোধন করে এবং সারি, এর সূচি, প্রাথমিক কী এবং অন্যান্য কলামগুলির দ্বারা ব্যবহৃত মোট সঞ্চয় স্থান বিবেচনা করে না।

ইয়ারকিউব তাঁর মন্তব্যে যেমন উল্লেখ করেছেন, কমপক্ষে একটি নালাম কলাম উপস্থিত থাকায় সামগ্রিকভাবে সারি স্টোরের জন্য অতিরিক্ত বিবেচনা রয়েছে।

ইনোডব ফিজিকাল সারি স্ট্রাকচার

রেকর্ড শিরোনামের পরিবর্তনশীল দৈর্ঘ্যের অংশে NULL কলামগুলি ইঙ্গিত করার জন্য কিছুটা ভেক্টর রয়েছে। যদি 9 থেকে 15 কলামের যে কোনও জায়গায় নাল হতে পারে তবে বিট ভেক্টর দুটি বাইট ব্যবহার করে)

...

শিরোনামের পরিবর্তনশীল-দৈর্ঘ্যের অংশেও ভেরিয়েবল-দৈর্ঘ্যের কলামগুলির দৈর্ঘ্য রয়েছে। কলামের সর্বোচ্চ দৈর্ঘ্যের উপর নির্ভর করে প্রতিটি দৈর্ঘ্য এক বা দুটি বাইট নেয় tes যদি সূচকের সমস্ত কলামগুলি শূন্য না হয় এবং একটি নির্দিষ্ট দৈর্ঘ্য থাকে, রেকর্ড শিরোনামের কোনও পরিবর্তনশীল-দৈর্ঘ্যের অংশ নেই

এবং হ্যাঁ, স্টোরেজ স্পেসটি আপনি যে ধরণের চয়ন করেছেন তার উপর ভিত্তি করে পরিবর্তিত পরিবর্তনগুলি, এটি কি স্থির বা পরিবর্তনশীল, কোলেশন এবং ইঞ্জিনের মতো অন্যান্য উপাদান।

মাইএসকিউএল এখানে ডেটা স্টোরেজ অনুকূলিতকরণের জন্য সুপারিশ করে: ডেটা আকারের অনুকূলকরণ

হালনাগাদ

ভারচারের সাথে আরও একটি বিবেচনা এবং এটি স্মৃতি। মাইএসকিউএলে একটি পরিবর্তনশীল দৈর্ঘ্যের কলামের আকার যথাসম্ভব সীমাবদ্ধ করা গুরুত্বপূর্ণ। যদিও কলামটি পরিবর্তনশীল এবং ব্যবহৃত স্টোরেজ স্পেসটি পরিবর্তনশীল, মাইএসকিউএল মান সংরক্ষণের জন্য স্থির অংশগুলিতে মেমরি বরাদ্দ করবে। উদাহরণস্বরূপ বারচর (200) আরও মেমরি ব্যবহার করবে যা বার্চর (5)। এটি কোনও স্টোরেজ স্পেসের সমস্যা নয়, তবে আপনার কলামগুলি সংজ্ঞায়িত করার সময় বিবেচনা করার মতো কিছু।


উপরের সংখ্যাগুলি CHARACTER SETলাতিন 1 বা আসকি অনুমান করে । ইউটিএফ 8-এর জন্য, প্রয়োজনীয় স্টোরেজটি CHAR(4)12 হয়
রিক জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.