মাইএসকিউএল ভর্চার এবং টেক্সট ডেটা টাইপের মধ্যে পার্থক্য কী?


19

সংস্করণ ৫.০.৩ (যা ভ্রচারকে ,৫,৫৩৩ বাইট হতে দেওয়া হয়েছিল এবং ট্রেলিং স্পেস ট্রানকাটিং বন্ধ করে দিয়েছিল), এই দুটি ডেটা ধরণের মধ্যে কি কোনও বড় পার্থক্য রয়েছে?

আমি পার্থক্যগুলির তালিকাটি পড়ছিলাম এবং নোটের কেবল দুটিটি হ'ল :

বিএলওবি এবং পাঠ্য কলামে সূচীর জন্য আপনাকে অবশ্যই একটি সূচক উপসর্গ দৈর্ঘ্য নির্দিষ্ট করতে হবে। CHAR এবং VARCHAR এর জন্য একটি উপসর্গ দৈর্ঘ্য isচ্ছিক। বিভাগ 7.5.1, "কলাম সূচী" দেখুন।

এবং

BLOB এবং পাঠ্য কলামগুলির মান মান থাকতে পারে না।

সুতরাং, পাঠ্য ডেটাটাইপের এই দুটি সীমাবদ্ধতার কারণে আপনি কেন এটি ভারচরের (65535) ব্যবহার করবেন? একে অপরের পারফরম্যান্স ছড়িয়ে আছে?


1
আপনি যখন ডেটাতে 65535 টিরও বেশি অক্ষর চান?
ব্ল্যাকইস

বর্ণা এবং পাঠ্যের মধ্যে মানদণ্ডগুলি সম্পর্কে এখানে বেশ ভাল ফোরাম থ্রেড রয়েছে: http://forums.mysql.com/read.php?24,105964,105964
বিভক্ত

যেহেতু সেখানে তালিকাটি স্পষ্ট বিবরণ দেবার জন্য সত্যিই একটি ভাল কাজ করে এবং আপনার ইতিমধ্যে পার্থক্যের তালিকাভুক্ত তালিকা রয়েছে বলে আমি নিশ্চিত না যে এটি ডিবিএতে আমাদের যে ধরণের প্রশ্নের প্রয়োজন তা নিশ্চিত। আপনি যে তালিকাটি উদ্ধৃত করেছেন এবং যে কারণে আপনি দিয়েছেন সেগুলি কি এই ক্ষেত্রে যথেষ্ট ভাল নয় ? তা না হলে আমি VtC যাচ্ছি
jcolebrand

1
আমি আমার প্রশ্নটি আপডেট করেছি, তবে একটি স্পষ্ট কারণ যা আমি নিশ্চিত নই যে অন্যটির পারফরম্যান্স। অন্যান্য অপ্রত্যাশিত কারণ রয়েছে কিনা তা নিশ্চিত নন
ডেরেক ডউনি

সুতরাং এটি কি ন্যায়সঙ্গত যে আপনি যা জিজ্ঞাসা করছেন তা একে অপরের উপরের পারফরম্যান্সের বৈশিষ্ট্যগুলি?
jcolebrand

উত্তর:


13

এমন কিছু তথ্যের সাথে লিঙ্কিত বিভক্ত যা মূল সমস্যাটি ব্যাখ্যা করে (পারফরম্যান্সের পার্থক্য রয়েছে), তবে এটি বলা সহজ যে একে অপরের চেয়ে সবসময় ভাল always (অন্যথায়, উভয়ই থাকার কোনও কারণ নেই)) এছাড়াও, মাইআইএসএম-তে, ARCH৪ কিলোমিটারের উচ্চতম আকারের জন্য ক্ষেত্র প্রতি নয় - এটি রেকর্ড অনুসারে।

মূলত, ডাটাবেস রেকর্ডে স্ট্রিং সংরক্ষণের 4 টি উপায় রয়েছে:

  1. নির্দিষ্ট দৈর্ঘ্যের
  2. সি-স্টাইলের স্ট্রিং (স্ট্রিংয়ের শেষে একটি নুল বা অনুরূপ অক্ষরের সাথে চিহ্নিত)
  3. পাস্কাল স্টাইলের স্ট্রিং (দৈর্ঘ্য নির্দেশ করার জন্য কয়েকটি বাইট, তারপরে স্ট্রিং)
  4. পয়েন্টার (স্ট্রিং অন্য কোথাও সংরক্ষণ করুন)

মাইআইএসএম ভ্রচারের জন্য # 3 এর অনুরূপ কিছু ব্যবহার করে এবং টেক্সটের জন্য একটি হাইব্রিড পদ্ধতির যেখানে এটি স্ট্রিংয়ের শুরুটি রেকর্ডে সংরক্ষণ করে, তারপরে বাকী স্ট্রিং অন্য কোথাও রেখে দেয়। ইনোডিবি ভিচারারের মতো, তবে রেকর্ডের বাইরে সম্পূর্ণ পাঠ্য ক্ষেত্র সংরক্ষণ করে।

1 এবং 4 দিয়ে, রেকর্ডের স্টাফগুলি সর্বদা একই দৈর্ঘ্যের, তাই আপনার যদি স্ট্রিং প্রয়োজন না হয় তবে এগুলি ছেড়ে যাওয়া আরও সহজ stuff # 2 এবং # 3 উভয়ই সংক্ষিপ্ত স্ট্রিংগুলির জন্য খুব খারাপ নয় ... # 2 টি চিহ্নিতকারীকে সন্ধান করতে হবে, যখন # 3 এগিয়ে যেতে পারে ... স্ট্রিং দীর্ঘ হওয়ার সাথে সাথে, # 2 এই বিশেষ ব্যবহারের জন্য আরও খারাপ হয় কেস।

আপনার যদি স্ট্রিংটি পড়ার দরকার হয় তবে # 4 ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে घ नीचे না ঘুরে ঘুরে ঘুরে ঘুরে ঘুরে ঘেফমেঘিটি ফেলা পড়ে ফেলা যাবে না!) আপনি যদি রেকর্ডটি পড়তে চান, তবে স্ট্রিংটি # 4 ধীরে ধীরে পড়তে হবে, তারপরে সেই স্ট্রিংটি পড়ুন যা ডিস্কে অন্য কোথাও সঞ্চিত থাকতে পারে, ঠিক কিভাবে ডেটাবেস এটি পরিচালনা করে তার উপর নির্ভর করে। # 1 সর্বদা বেশ সরল থাকে এবং আবার আপনি একই ধরণের সমস্যায় চলে যান যেখানে # 2 এর জন্য স্ট্রিংটি আরও দীর্ঘতর হয়, যখন # 3 খুব ছোট স্ট্রিংয়ের জন্য # 2 এর চেয়ে কিছুটা খারাপ, তবে এটি দীর্ঘ হওয়ার সাথে সাথে আরও ভাল।

তারপরে স্টোরেজ প্রয়োজনীয়তা রয়েছে ... # 1 সর্বদা একটি নির্দিষ্ট দৈর্ঘ্য হয়, তাই বেশিরভাগ স্ট্রিং সর্বোচ্চ দৈর্ঘ্য না হলে এটি ফুলে উঠতে পারে। # 2 এর 1 টি অতিরিক্ত বাইট রয়েছে; # 3 এর সাধারণত 2 দৈর্ঘ্য বাইট থাকে সর্বোচ্চ দৈর্ঘ্য = 255, একটি 64 কে সর্বোচ্চ হলে 4 অতিরিক্ত বাইট। # 4 এর পয়েন্টার দৈর্ঘ্য, আরও # 3 এর নিয়ম রয়েছে।

মাইএসকিউএল 5.1 এর মধ্যে সুনির্দিষ্ট বাস্তবায়নের জন্য, মাইআইএসএম রাষ্ট্রের জন্য দস্তাবেজগুলি :

  • সত্যিকারের VARCHAR প্রকারের জন্য সমর্থন; একটি VARCHAR কলাম একটি বা দুটি বাইটে সঞ্চিত দৈর্ঘ্যের সাথে শুরু হয়।
  • VARCHAR কলাম সহ টেবিলগুলির স্থির বা গতিশীল সারির দৈর্ঘ্য থাকতে পারে।
  • একটি সারণীতে ভ্রচার এবং CHAR কলামগুলির দৈর্ঘ্যের যোগফল 64KB অবধি হতে পারে।

InnoDB এর জন্য থাকাকালীন :

  • রেকর্ড শিরোনামের পরিবর্তনশীল দৈর্ঘ্যের অংশে NULL কলামগুলি ইঙ্গিত করার জন্য কিছুটা ভেক্টর রয়েছে। সূচীতে কলামগুলির সংখ্যা যেটি NUL হতে পারে সেগুলি N হয়, বিট ভেক্টর সিইলিং (এন / 8) বাইট দখল করে। (উদাহরণস্বরূপ, যদি 9 থেকে 15 কলামের যে কোনও স্থানে NULL হতে পারে তবে বিট ভেক্টর দুটি বাইট ব্যবহার করে) শিরোনামের পরিবর্তনশীল-দৈর্ঘ্যের অংশেও ভেরিয়েবল-দৈর্ঘ্যের কলামগুলির দৈর্ঘ্য রয়েছে। কলামের সর্বোচ্চ দৈর্ঘ্যের উপর নির্ভর করে প্রতিটি দৈর্ঘ্য এক বা দুটি বাইট নেয় tes যদি সূচকের সমস্ত কলামগুলি শূন্য না হয় এবং একটি নির্দিষ্ট দৈর্ঘ্য থাকে, রেকর্ড শিরোনামের কোনও পরিবর্তনশীল-দৈর্ঘ্যের অংশ নেই।
  • প্রতিটি নন-নুল ভেরিয়েবল-দৈর্ঘ্যের ক্ষেত্রের জন্য, রেকর্ড শিরোনামটিতে কলামের দৈর্ঘ্য এক বা দুটি বাইট থাকে। দুটি বাইট কেবল তখনই প্রয়োজন হবে যদি কলামের অংশটি বহির্মুখী পৃষ্ঠাগুলিতে বাহ্যিকভাবে সংরক্ষণ করা হয় বা সর্বোচ্চ দৈর্ঘ্য 255 বাইটের বেশি হয় এবং প্রকৃত দৈর্ঘ্য 127 বাইটের বেশি হয় ex বাহ্যিকভাবে সঞ্চিত কলামের জন্য, দ্বি-বাইট দৈর্ঘ্য অভ্যন্তরীণভাবে সঞ্চিত অংশের দৈর্ঘ্য এবং 20-বাইট পয়েন্টার বাহ্যিকভাবে সঞ্চিত অংশকে নির্দেশ করে। অভ্যন্তরীণ অংশটি 768 বাইট, সুতরাং দৈর্ঘ্য 768 + 20। 20-বাইট পয়েন্টারটি কলামটির আসল দৈর্ঘ্য সঞ্চয় করে।

...

অন্যান্য অনেক কিছুর সাথে যেমন ডেটাবেসগুলি ব্যবহার করার সময়, আপনি যদি নিজের প্রয়োজনগুলির জন্য সর্বোত্তম কী তা নিশ্চিত না হন তবে অনুরূপ ডেটা এবং ব্যবহারের সাথে এটি বেঞ্চমার্ক করার চেষ্টা করুন এবং দেখুন তারা কী আচরণ করে।


থ্রেড বিভক্ত লিঙ্কে
মাইকেল মায়ার

1
নিতপিক ... সমস্ত ব্যবহারিক উদ্দেশ্যে, কোনও ইঞ্জিনে একটি সারিতে 64KB সীমা নেই। LONGTEXTএবং LONGBLOBপয়েন্টে একটি কেস। সি-স্টাইলের স্ট্রিংগুলি মাইএসকিউএল দ্বারা ব্যবহৃত হয় না (যা আমি জানি)। ইনোডিবি একটি 'হাইব্রিড' পদ্ধতির ব্যবহার করে তবে এটি আরও জটিল, সারির আকার, সারি_ফর্ম্যাট ইত্যাদির উপর নির্ভর করে etc. "স্থির" দৈর্ঘ্যের স্ট্রিংগুলি সংরক্ষণ করা প্রায়শই কখনই পরামর্শ দেওয়া হয় না যদি এগুলি প্রকৃত স্থায়ী দৈর্ঘ্যের হয় (দেশ_কোড, জিপ_কোড ইত্যাদি) । ইনোডিবিতে রয়েছে 4 ROW_FORMATs; পাঠ্যটি কেবল তাদের মধ্যে 1 বা 2 নিয়ে আলোচনা করে।
রিক জেমস

2

যখন কোনও নির্বাচনকে অস্থায়ী টেবিল তৈরি করতে হয় (যেমন ফলাফলগুলি সাজানোর জন্য), এটি হয় একটি স্মৃতি সারণী, বা একটি মাইএসএএম টেবিল তৈরি করবে। মেমরি আরও দক্ষ। মেমোরির উপর বিধিনিষেধ রয়েছে - একটি হ'ল পাঠ এবং বিএলওবি বর্জন করা। অতএব, একটি নির্বাচন V अक्षरের চেয়ে টেক্সটের সাথে ধীর গতিতে চলতে পারে

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