মাইএসকিউএল: বৃহত্তর ভোচারার বনাম টেক্সট?


844

আমি মাইএসকিউএলে একটি বার্তা টেবিল পেয়েছি যা ব্যবহারকারীদের মধ্যে থাকা বার্তাগুলি রেকর্ড করে। টিপিক্যাল আইডি এবং বার্তার প্রকারগুলি (সমস্ত পূর্ণসংখ্যার প্রকারের) বাদে আমাকে সত্যিকারের বার্তার পাঠ্যটি ভিচারার বা টেক্সট হিসাবে সংরক্ষণ করতে হবে। আমি 3000 অক্ষরের একটি ফ্রন্ট-এন্ড সীমা নির্ধারণ করছি যার অর্থ বার্তাগুলি আর কখনও আর ডিবিতে প্রবেশ করাতে পারে না।

ভ্রচার (3000) বা টেক্সট দিয়ে যাবার কি যুক্তি আছে? কেবল VARCHAR (3000) লেখার বিষয়ে এমন কিছু আছে যা কিছুটা স্ব-স্বজ্ঞাত বোধ করে। স্ট্যাক ওভারফ্লোতে আমি অন্যান্য অনুরূপ পোস্টগুলির মধ্য দিয়ে এসেছি তবে এই ধরণের সাধারণ বার্তা সংরক্ষণের জন্য নির্দিষ্ট মতামত পাওয়া ভাল।


27
কিছুটা পুরানো, তবে আমি এখানে এসেছি কারণ আমি এমন একটি সমস্যায় পড়েছিলাম যা আমাকে এই সম্পর্কে ভাবতে বাধ্য করেছে। আমার ক্ষেত্রে আমার ফ্রন্ট-এন্ড ফর্মটি 2,000 অক্ষরের মধ্যে সীমাবদ্ধ ছিল তবে আমার স্টোরেজ পদ্ধতিতে অন্তর্ভুক্ত এনকোডিংটি আন্তর্জাতিক অক্ষরকে একাধিক অক্ষর হিসাবে এনকোড করেছে (যা স্পষ্টত 3 থেকে 12 পর্যন্ত চরিত্রের জন্য হতে পারে)। সুতরাং আমার 2,000 হঠাৎ করে 24,000 পর্যন্ত হয়ে যায়। কিছু ভাবনা ...
জেমস এস

3
অনেকগুলি সহবর্তী সন্নিবেশগুলির জন্য আমি পাঠ্যটি উল্লেখযোগ্যভাবে দ্রুততর হতে পেয়েছি।
রায় এস

1
@ জামেস: utf8mb4 ...>। <
অবিভাজ্য

10
@RickJames বরং ঘনিষ্ঠ প্রশ্ন তুলনায় একটি আপডেট উত্তর পোস্ট বিবেচনা,
Yvette,

3
@ ইয়ভেটে কলম্বম্ব - আমি একটি উত্তর যুক্ত করেছি। আমি প্রধানত গৃহীত উত্তর থেকে মুক্তি পেতে চাই কারণ এটি তারিখের বাইরে । আমি প্রশ্নোত্তরে এসেছি কারণ কেউ "754 উর্ধ্বতন বলেছে, তাই সঠিক তথ্যটি" বলে ভুল তথ্য উদ্ধৃত করছিল। ঠিক আছে, আমি অনুমোদিত উত্তরটিও সম্পাদনা করেছি। (যদিও এটি অনুচিত মনে হয়))
রিক জেমস

উত্তর:


811
  • TEXTএবং BLOB পারে দ্বারা টেবিল মাত্র প্রকৃত সঞ্চয়ের অবস্থানে একটি পয়েন্টার থাকার টেবিল বন্ধ সংরক্ষণ করা হয়। যেখানে এটি সংরক্ষণ করা হয়েছে তা ডেটা আকার, কলামের আকার, সারি_ফর্ম্যাট এবং মাইএসকিউএল সংস্করণ যেমন প্রচুর পরিমাণে নির্ভর করে।

  • VARCHARটেবিলের সাথে ইনলাইন সংরক্ষণ করা হয়। VARCHARআকারটি যুক্তিসঙ্গত হলে দ্রুত হয়, যার ট্রেড অফটি আপনার ডেটা এবং আপনার হার্ডওয়ারের উপর নির্ভর করে, আপনি আপনার ডেটা দিয়ে একটি বাস্তব-বিশ্বের দৃশ্যের বেঞ্চমার্ক করতে চান।


148
+1: ডেটা ঘন ঘন পুনরুদ্ধার করা হয় (বেশিরভাগ ক্যোয়ারী দ্বারা অন্তর্ভুক্ত) ভিচারআরআর (সঞ্চিত ইনলাইন) সাধারণত দ্রুত হয়। যাইহোক, প্রচুর পরিমাণে ডেটা যেগুলি সাধারণত পুনরুদ্ধার করা হয় না (যা কোনও প্রশ্ন দ্বারা রেফারেন্স করা হয় না), তারপরে ইনলাইনটি ডেটা না রাখাই ভাল। ইনলাইন সঞ্চিত ডেটার জন্য সারি আকারের উপরের সীমা রয়েছে।
spencer7593

21
@ পেসারিয়র: "ইনলাইন" স্টোরেজ এড়ানোর সঠিক সুবিধা হ'ল একটি ব্লকে সঞ্চিত সারিগুলির সংখ্যা বৃদ্ধি, যার অর্থ টেবিলের সারিগুলি InnoDB বাফার ক্যাশে (আরও ছোট মেমরির পদক্ষেপ) কম ব্লক দখল করে এবং এর অর্থ কম means ব্লকগুলি ডিস্কে এবং থেকে স্থানান্তরিত হবে (হ্রাস I / O)। তবে, এটি কেবলমাত্র পারফরম্যান্সের সুবিধার যদি "সারি বন্ধ" সঞ্চিত কলামগুলি ক্যোয়ারী দ্বারা মূলত অবাস্তব হয়। যদি এই "অফ সারি" কলামগুলি বেশিরভাগ ক্যোয়ারী দ্বারা রেফারেন্স করা হয়, তবে এতে উপকারটি বেশিরভাগ ক্ষেত্রে বাষ্পীভবন হয়। সারণি সর্বাধিক সারি আকারে ফিট করে এবং প্রায়শই উল্লেখ করা হয় তবে ইনলাইনটিকে অগ্রাধিকার দেওয়া হয়।
spencer7593

231
"আকারটি যুক্তিসঙ্গত হলে VARCHAR দ্রুত হয়"। "যুক্তিসঙ্গত" অক্ষরের সংখ্যা কী, 100? 1000? 100,000?
টিম পিটারসন

125
এই উত্তর InnoDB- র জন্য সঠিক নয়। যদি কোনও প্রদত্ত সারির মানটি পৃষ্ঠার আকারের সাথে মানিয়ে তোলে (তবে 16KB এবং প্রতিটি পৃষ্ঠায় অবশ্যই কমপক্ষে দুটি সারি রাখতে হবে) উভয় VARCHAR এবং BLOB / পাঠ্য উভয়ই অন্যান্য কলামের সাথে ইনলাইন সঞ্চিত রয়েছে are স্ট্রিং যদি এর জন্য খুব বড় হয় তবে এটি অতিরিক্ত পৃষ্ঠাগুলিতে উপচে পড়ে। বিস্তারিত ব্যাখ্যার জন্য mysqlperformanceblog.com/2010/02/09/blob-stores-in-innodb দেখুন ।
বিল কারভিন

14
@ বিলকারভিন ... যদি আমি সঠিকভাবে বুঝতে পারি তবে ছোট পাঠ্যের আইটেমগুলির জন্য InnoDB এর মধ্যে varcharএবং blob/ এর মধ্যে পারফরম্যান্সের কোনও পার্থক্য থাকা উচিত নয় text? সুতরাং এটি তারপর জ্ঞানী হও শুধু যে করবার জন্য প্রস্তুতি নিচ্ছে varcharএকটি textধরন এবং দিন ডিবি ইনলাইন বনাম ওভারফ্লো পরিচালনা করেন?
রাইভ্যানটেজ

473

আপনি কি ভবিষ্যদ্বাণী করতে পারেন যে ব্যবহারকারী ইনপুট কত দিন হবে?

VARCHAR (এক্স)

কেস: ব্যবহারকারীর নাম, ইমেল, দেশ, বিষয়, পাসওয়ার্ড


টেক্সট

কেস: বার্তা, ইমেল, মন্তব্য, ফর্ম্যাট পাঠ্য, এইচটিএমএল, কোড, চিত্র, লিঙ্ক


MEDIUMTEXT

কেস: বড় জসন বডি, ছোট থেকে মাঝারি দৈর্ঘ্যের বই, সিএসভি স্ট্রিং


LONGTEXT

কেস: পাঠ্যপুস্তক, প্রোগ্রাম, লগের ফাইলগুলির বছর, হ্যারি পটার এবং আগুনের ছাঁচ, বৈজ্ঞানিক গবেষণা লগিং


7
অনুমানযোগ্যতা এখানে সত্যিই একটি পার্শ্ব আইটেম। এটি প্রকৃতপক্ষে সর্বাধিক প্রত্যাশিত দৈর্ঘ্য যা সিদ্ধান্ত নেওয়ার কারণ হতে হবে। আপনি যে আইটেমগুলি বেশি অনুমানযোগ্য হিসাবে উল্লেখ করেছেন সেগুলি কেবল সেভাবেই কারণ সেগুলি অন্যের চেয়ে খাটো
অ্যান্ড্রু বারবার

29
@ অ্যান্ড্রু-নাপিত এটি যদিও আমার বিষয়। অন্যান্য সমস্ত পোস্টগুলি পার্থক্য সম্পর্কে ভালভাবে ব্যাখ্যা করে তবে কখন যে পরিস্থিতিগুলির বিষয়ে আপনাকে দুজনের মধ্যে কোনও পছন্দ করতে হবে তা নয়। আমি সংক্ষিপ্তভাবে সংক্ষিপ্ততর জন্য ভালার ব্যবহার করে চিহ্নিত করার চেষ্টা করছিলাম ভাল পছন্দ এবং নির্বিচারে দীর্ঘস্থায়ী জন্য টেক্সট ব্যবহার করা ভাল পছন্দ।
মাইকেল জে। ক্যালকিনস

1
যদি সমস্ত কলামগুলি সংক্ষিপ্ত এবং অনুমানযোগ্য হয় (উদাঃ ম্যাক ঠিকানা, আইএমইআই ইত্যাদি things InnoDb যদিও আমি এটি সম্পর্কে নিশ্চিত নই।
ম্যাট

1
@ মাইকেল জে.ক্যালকিনস থিং যা মাইএসকিউএল 5.6 এ ঘটেছিল। এখন আপনারও InnoDB- এ পুরো টেক্সট অনুসন্ধান রয়েছে। দেখুন dev.mysql.com/doc/refman/5.6/en/fulltext-search.html
PhoneixS

7
চরিত্রের সীমা: TINYTEXT: 255; পাঠ্য: 65,535; মিডিয়ামটেক্সট: 16,777,215; দীর্ঘ পাঠ: 4,294,967,29।
ভিক্টর Stoddard

218

শুধু সেরা অনুশীলন স্পষ্ট করার জন্য:

  1. পাঠ্য বিন্যাস বার্তাগুলি প্রায় সর্বদা পাঠ্য হিসাবে সংরক্ষণ করা উচিত (এগুলি নির্বিচারে দীর্ঘ হয়)

  2. স্ট্রিং বৈশিষ্ট্যগুলি ভ্রচার (গন্তব্য ব্যবহারকারীর নাম, বিষয়, ইত্যাদি) হিসাবে সংরক্ষণ করা উচিত।

আমি বুঝতে পারি যে আপনি একটি সামনের শেষ সীমা পেয়েছেন, যা এটি না হওয়া অবধি দুর্দান্ত। * গ্রিন * কৌশলটি হ'ল ডিবি এটির সাথে সংযুক্ত অ্যাপ্লিকেশনগুলির থেকে পৃথক। কেবলমাত্র একটি অ্যাপ্লিকেশন ডেটাতে সীমাবদ্ধ করে, এর অর্থ এই নয় যে ডেটা অভ্যন্তরীণভাবে সীমাবদ্ধ।

এগুলি কী সেগুলি সেই বার্তাগুলি সম্পর্কে যা তাদের 3000 অক্ষরের বেশি কখনও হতে বাধ্য করে না? যদি এটি কেবল একটি স্বেচ্ছাসেবী অ্যাপ্লিকেশন সীমাবদ্ধ থাকে (বলুন, কোনও পাঠ্য বাক্স বা কোনও TEXTকিছুর জন্য ), ডেটা স্তরে একটি ক্ষেত্র ব্যবহার করুন ।


"যা দুর্দান্ত না হওয়া অবধি" এর অর্থ কী? "না" কি বোঝায়?
পেসারিয়ার

7
@ পেসারিয়র আপনাকে "না" এর উদাহরণ দেওয়ার জন্য সম্ভবত জেমস সম্ভবত: টুইটারের উদাহরণস্বরূপ নিন, যিনি খুব অল্পকাল অবধি প্রধানমন্ত্রীগণের উপরে একটি 140 চরিত্রের সীমা রেখেছিলেন। তারা সিদ্ধান্ত নিয়েছে যে এটি আর বোধগম্য নয় এবং পুরোপুরি সীমাটি সরিয়ে ফেলতে বেছে নিয়েছে। যদি তারা সে সম্পর্কে আগে চিন্তা না করে থাকে (যা আমি সম্ভবত তারা নিশ্চিতভাবেই পেরেছি ...) তারা উপরে বর্ণিত দৃশ্যে চলে যেত।
পলস্কিনার

9
আমি কেবল আমাদের নতুন ডাটাবেস স্থাপন করছি, এবং আমি ধরে নিয়েছিলাম যে কেউ সম্ভবত আমাদের ক্ষুদ্র মন্তব্য বাক্সগুলিতে 2000 টিরও বেশি অক্ষর ফেলতে পারে না, এবং তারপরে, জেমস নোট হিসাবে, আজ রাতে হঠাৎ এটি "ঠিক ছিল না" কারণ কোনও ব্যবহারকারী একটি পোস্ট দিয়েছিলেন 2600 অক্ষর দীর্ঘ ছিল খুব বৈধ মন্তব্য। আমি ভ্যাচার (2000) ব্যবহার করে ভেবেছিলাম এটি সম্ভবত এর চেয়ে বেশি সময় পেতে পারে না, এবং আমি ভুল ছিল। তাই হ্যাঁ, এটি না হওয়া অবধি দুর্দান্ত। আমাদের ক্ষেত্রে এটি প্রকাশ করতে কয়েক দিন সময় নিয়েছে। মাইকেল জে। ক্যালকিন্স, নীচের নিয়মটি আমি মনে করি আমি এখন থেকে ব্যবহার করব। বার্তা, মন্তব্যগুলির জন্য পাঠ্য।
টিকটিকি

1
@ পেসারিয়ার "যা দুর্দান্ত না হওয়া পর্যন্ত দুর্দান্ত" " অন্য কথায়, এটি প্রায় সর্বদা কাজ করে এবং দুর্দান্ত হয় ... ব্যতিক্রমী পরিস্থিতি ব্যতীত যেখানে এটি এত দুর্দান্ত নয়।
সীমাবদ্ধ প্রায়শ্চিত্ত

@ পেসিয়ারের আরও একটি আকর্ষণীয় উদাহরণ নির্বাচিত উত্তরের মন্তব্যে উল্লেখ করা হয়েছে, মূলত তার 2,000,000 অক্ষরের সামনের সীমা ছিল তবে প্রবর্তিত চরিত্রগুলি একটি কোডপেজে ছিল যা বাস্তবে স্বাভাবিক অক্ষরের চেয়ে বেশি বাইট ব্যবহার হত, তার ডাটাবেসটি স্থানের প্রয়োজনের শেষ পর্যন্ত শেষ হয়েছিল 24 কে অক্ষরের জন্য কেবলমাত্র তাকে পরিচয় করানো অক্ষরের আসল বাইট আকারের জন্য অ্যাকাউন্ট করতে হয়েছিল।
র‌্যাপ্টোরএক্স

32

দাবি অস্বীকার: আমি কোনও মাইএসকিউএল বিশেষজ্ঞ নই ... তবে সমস্যাগুলি সম্পর্কে এটি আমার বোঝা।

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

এছাড়াও VARCHAR সারিটির অংশ গঠনের কারণে, আমি সন্দেহ করি যে ক্ষেত্রের দিকে অনুসন্ধান করা প্রশ্নগুলি কোনও টেক্সট অংশ ব্যবহার করার চেয়ে কিছুটা দ্রুত হবে।


38
সারি দৈর্ঘ্যের সীমা 65,535 বাইট [ dev.mysql.com/doc/refman/5.0/en/column-count-limit.html ]। যদি আপনার কলামটি utf8-encoded হয়, তার অর্থ একটি 3000-অক্ষরের varcharকলামে 9000 বাইট লাগতে পারে।
জান ফ্যাব্রি 21

7
ইউটিএফ -8 অক্ষর 4 বাইট পর্যন্ত হতে পারে, সুতরাং আমি মনে করি আপনি 12,000 বাইট বোঝাতে চেয়েছিলেন (যদি এখানে কিছু মাইএসকিউএল জিনিস না বুঝে আমি বুঝতে পারি না)।
রায়লু

13
@ রেলু মাইএসকিউএল এর ইউটিএফ -8 হ'ল "নকল ইউটিএফ -8" যাতে এটি প্রতি চরিত্র সর্বোচ্চ 3 বাইট সমর্থন করে, তাই মাইএসকিউএল এর ইউটিএফ -8 এ বিএমপি প্লেনের বাইরে ইউনিকোড অক্ষর সরাসরি রাখার উপায় নেই। এটি মাইএসকিউএল 5.5 এ স্থির করা হয়েছে।
পেসারিয়ার

2
আমি বিশ্বাস করি যে এই দাবিটি কেবল মাইআইএসএএম এর জন্য বৈধ। আমি একটি নির্দিষ্ট উত্স খুঁজে পাচ্ছি না তবে আমি বিশ্বাস করি যে ইনোডিবি TEXTটেবিলে ইনলাইনও সঞ্চয় করে ।
dotancohen

2
@ ডোটানকোহেন আমি এখানে একটি উত্স পেয়েছি যা ব্যাখ্যা করে যে ইনোডিবি ব্যবহার করে চলক দৈর্ঘ্যের ডেটা সংরক্ষণ করা বিভিন্ন রকম হতে পারে (বাহ্যিকভাবে বা সারির মধ্যে ইনলাইন সংরক্ষণ করা যেতে পারে) mysqlserverteam.com/externally-stored-fields-in-innodb
কিএক্স অর্টিলান

30

সংক্ষিপ্ত উত্তর: কোন ব্যবহারিক, কর্মক্ষমতা, বা সঞ্চয়স্থান, পার্থক্য নেই।

দীর্ঘ উত্তর:

VARCHAR(3000)(বা অন্য কোনও বৃহত সীমা) এবং এর মধ্যে মূলত কোনও পার্থক্য নেই (মাইএসকিউএল এ) TEXT। প্রাক্তনটি 3000 টি অক্ষর ছাঁটাই করবে ; দ্বিতীয়টি 65535 বাইটে কেটে যাবে । (আমি বাইট এবং অক্ষরগুলির মধ্যে পার্থক্য করি কারণ একটি চরিত্র একাধিক বাইট নিতে পারে))

ছোট সীমাবদ্ধতার জন্য VARCHAR, কিছু সুবিধা রয়েছে TEXT

  • "ছোট" এর অর্থ সংস্করণ, প্রসঙ্গ এবং উপর নির্ভর করে 191, 255, 512, 767 বা 3072 ইত্যাদি CHARACTER SET
  • INDEXesকত বড় কলামকে সূচিযুক্ত করা যায় তা সীমাবদ্ধ। (767 বা 3072 বাইট ; এটি সংস্করণ এবং সেটিংস নির্ভর)
  • মধ্যবর্তী টেবিলগুলি জটিল দ্বারা তৈরি SELECTs দুটি পৃথক উপায়ে পরিচালনা করা হয় - মেমোরি (দ্রুত) বা মাইআইএসএএম (ধীর)। যখন 'বৃহত্তর' কলামগুলি জড়িত থাকে, তখন ধীর কৌশলটি স্বয়ংক্রিয়ভাবে বাছাই করা হয়। (৮.০ সংস্করণে উল্লেখযোগ্য পরিবর্তন আসছে; সুতরাং এই বুলেট আইটেমটি পরিবর্তিত হতে পারে))
  • পূর্ববর্তী আইটেমের সাথে সম্পর্কিত, সমস্ত TEXTডেটাটাইপগুলি (বিপরীতে VARCHAR) সরাসরি মাইআইএসএমে ঝাঁপিয়ে পড়ে। এটি হল TINYTEXTসমমানের চেয়ে উত্পন্ন টেম্প টেবিলগুলির জন্য স্বয়ংক্রিয়ভাবে খারাপ VARCHAR। (তবে এটি আলোচনাকে তৃতীয় দিকে নিয়ে যায়!)
  • VARBINARYমত VARCHAR; BLOBভালো হয় TEXT

অন্যান্য উত্তরের প্রত্যাখ্যান

মূল প্রশ্নটি একটি জিনিস জিজ্ঞাসা করেছিল (কোন ডেটাটাইপটি ব্যবহার করতে হবে); গৃহীত উত্তর অন্য কিছু উত্তর দিয়েছে (অফ-রেকর্ড স্টোরেজ)। সেই উত্তরটি এখন পুরানো।

যখন এই থ্রেডটি শুরু হয়েছিল এবং উত্তর দেওয়া হয়েছিল, তখন ইনোডিবিতে কেবল দুটি "সারি ফর্ম্যাট" ছিল। এরপরেই আরও দুটি ফর্ম্যাট ( DYNAMICএবং COMPRESSED) প্রবর্তিত হয়েছিল।

জন্য সংগ্রহস্থলের অবস্থান TEXTএবং VARCHAR()উপর ভিত্তি করে তৈরি আকার , উপর না ডাটাটাইপ নাম । একটি জন্য আপডেট চালু / বন্ধ রেকর্ড বৃহৎ টেক্সট / ফোঁটা কলামের সঞ্চয়ের আলোচনা, দেখতে এই


1
এখানে কিছু ভাল অন্তর্দৃষ্টি। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
কোস্তা কন্টোস

2
@ কোস্টা কন্টোস - প্রশংসা এবং টাইপো ঠিক করার জন্য ধন্যবাদ। আমি যখন আরও ভাল উত্তরের প্রয়োজন দেখি তখন আমি 8 বছর এবং 800 টিও দেরি করে হলেও একটি উত্তর যুক্ত করব।
রিক জেমস

7

পূর্ববর্তী উত্তরগুলি মূল সমস্যাটির পক্ষে যথেষ্ট জোর দেয় না: এমনকি খুব সাধারণ প্রশ্নগুলিতেও

(SELECT t2.* FROM t1, t2 WHERE t2.id = t1.id ORDER BY t1.id) 

একটি অস্থায়ী টেবিলের প্রয়োজন হতে পারে এবং যদি কোনও VARCHARক্ষেত্র জড়িত থাকে তবে CHARএটি অস্থায়ী টেবিলের একটি ক্ষেত্রে রূপান্তরিত হয় । সুতরাং যদি আপনি আপনার টেবিলে একটি VARCHAR(65000)ক্ষেত্রের সাথে 500,000 লাইন বলছেন তবে এই কলামটি একা 6.5 * 5 * 10 ^ 9 ব্যবহার করবে বাইট । এই ধরনের টেম্প টেবিলগুলি মেমরিতে হ্যান্ডেল করা যায় না এবং ডিস্কে লিখিত হয়। এর প্রভাব ভয়াবহ হতে পারে বলে আশা করা যায়।

উত্স (মেট্রিক সহ): https://nicj.net/mysql-text-vs-varchar-performance/ (এটি "স্ট্যান্ডার্ড" (?) মাইআইএসএএম স্টোরেজ ইঞ্জিনে TEXTবনাম হ্যান্ডলিং বোঝায় VARCHARothers এটি অন্যদের মধ্যে পৃথক হতে পারে, যেমন, InnoDB।)


3
InnoDB: একইটি 5.7 সংস্করণের মাধ্যমে প্রযোজ্য। 8.0 সহ, ভার্চর টেম্পগুলি পরিবর্তনশীল দৈর্ঘ্য।
রিক জেমস

3

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

আপনি যদি ভিচআরআরএর চেয়ে তাত্পর্য অনুসন্ধান, আপডেট বা মুছার জন্য আপনার ক্ষেত্রকে সূচক করতে হয় তবে তা যত বড়ই হোক না কেন। একটি VARCHAR (10000000) কখনই কোনও পাঠ্য ক্ষেত্রের সমতুল্য হবে না কারণ এই দুটি ডেটা প্রকারের প্রকৃতির ক্ষেত্রে আলাদা।

  • যদি আপনি কেবল সংরক্ষণাগার জন্য ফিল্ড ব্যবহার করেন
  • আপনি ডেটা গতির পুনরুদ্ধার সম্পর্কে চিন্তা করবেন না
  • আপনি গতি সম্পর্কে যত্নবান হন তবে আপনি আপনার অনুসন্ধান ক্যোয়ারীতে '% LIKE%' অপারেটরটি ব্যবহার করবেন সুতরাং সূচীকরণ খুব বেশি সহায়তা করবে না
  • আপনি ডেটার দৈর্ঘ্যের একটি সীমা অনুমান করতে পারবেন না can't

পাঠ্য যান চেয়ে।


আংশিকভাবে বিভ্রান্তিকর তথ্য: পাঠ্য কলামগুলি তাদের সম্পূর্ণরূপে সূচক হতে পারে না। আপনি যখন সূচীতে কোনও পাঠ্য কলামটি অন্তর্ভুক্ত করবেন তখন আপনাকে অবশ্যই দৈর্ঘ্য নির্দিষ্ট করতে হবে। এছাড়াও সূত্রের আকারের সর্বাধিক দৈর্ঘ্য থাকায় VARCHARs> 255 এর ক্ষেত্রে ভোচারগুলি তাদের সম্পূর্ণরূপে সূচকযুক্ত করা যায় না।
eRadical

2

বার্চারটি ইমেল ঠিকানার মতো ছোট ডেটার জন্য, অন্যদিকে পাঠ্যটি নিউজ নিবন্ধগুলির মতো বড় ডেটার জন্য, বাইনারি ডেটা যেমন চিত্রের জন্য ব্লব।

বর্ণের অভিনয় আরও শক্তিশালী কারণ এটি সম্পূর্ণরূপে মেমরি থেকে চালিত হয়, তবে varchar(4000)উদাহরণস্বরূপ ডেটা খুব বড় হলে এই ক্ষেত্রে হবে না ।

অন্যদিকে, পাঠ্য, স্মৃতিতে আটকে থাকে না এবং ডিস্কের কার্যকারিতা দ্বারা প্রভাবিত হয় তবে আপনি এড়াতে পারেন পাঠ্যের ডেটা আলাদা টেবিলে আলাদা করে পাঠ্য ডেটা পুনরুদ্ধার করতে বাম জোড় কোয়েরি প্রয়োগ করুন।

ব্লব অনেক ধীর গতির তাই এটি যদি কেবলমাত্র আপনার 10000 চিত্রের মতো বেশি ডেটা না থাকে যার জন্য 10000 রেকর্ড লাগবে তা ব্যবহার করুন।

সর্বাধিক গতি এবং পারফরম্যান্সের জন্য এই টিপসগুলি অনুসরণ করুন:

  1. নাম, শিরোনাম, ইমেলগুলির জন্য বারচর ব্যবহার করুন

  2. বড় ডেটা জন্য পাঠ্য ব্যবহার করুন

  3. বিভিন্ন টেবিল পৃথক পৃথক পাঠ্য

  4. কোনও ফোন নম্বরের মতো কোনও আইডিতে বাম যোগদানের প্রশ্নগুলি ব্যবহার করুন

  5. আপনি যদি ব্লব ব্যবহার করতে যাচ্ছেন তবে পাঠ্যের মতো একই টিপস প্রয়োগ করুন

এটি ডেটা> 10 এম এবং 10 গিগাবাইট পর্যন্ত গ্যারান্টিযুক্ত মাপের টেবিলগুলিতে ক্যোরিয়ার ব্যয় মিলিসেকেন্ড তৈরি করবে।

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