মাইএসকিউএল ভোরচার আকারের পারফরম্যান্সের প্রভাব lic


45

ভার্চার আকারের মধ্যে মাইএসকিউএলে পারফরম্যান্সের পার্থক্য রয়েছে? উদাহরণস্বরূপ, varchar(25)এবং varchar(64000)। যদি তা না হয়, কেবলমাত্র আপনার ঘরটি বাইরে চলেছে না তা নিশ্চিত করার জন্য সর্বাধিক আকারের সাথে সমস্ত বার্চার ঘোষণা না করার কোনও কারণ আছে কি?


3
এই প্রশ্নটি +1 সমস্ত ডিবিএমএসের মতোই প্রযোজ্য। আমার পর্যবেক্ষণে অনেকগুলি বর্ণের আকার বাড়তে থাকে।
bernd_k

5
মাইএসকিউএল নয়, তবে দেপেসের এই ব্লগ পোস্টটি পোস্টগ্রেএসকিউএল-র জন্য আপনার প্রশ্নের উত্তর দিতে পারে ।
xenoterracide

উত্তর:


29

আপনাকে অবশ্যই CHAR বনাম VARCHAR ব্যবহারের ট্রেড অফগুলি বুঝতে হবে

CHAR ক্ষেত্রের সাথে, আপনি যা বরাদ্দ করেন তা হ'ল যা আপনি পান। উদাহরণস্বরূপ, CHAR (15) 15 বাইট বরাদ্দ করে এবং সঞ্চয় করে, আপনি ক্ষেত্রের মধ্যে যতগুলি অক্ষর রাখেন তা নির্বিশেষে। স্ট্রিং ম্যানিপুলেশন সহজ এবং সোজা, যেহেতু ডেটা ক্ষেত্রের আকার সম্পূর্ণ অনুমানযোগ্য।

VARCHAR ক্ষেত্রগুলির সাথে, আপনি একটি সম্পূর্ণ আলাদা গল্প পাবেন। উদাহরণস্বরূপ, ভোরচার (১৫) আসলে ডাইনামিকভাবে 16 বাইট অবধি, ডেটার জন্য 15 অবধি এবং কমপক্ষে 1 অতিরিক্ত বাইট উপাত্তের দৈর্ঘ্য সংরক্ষণ করার জন্য বরাদ্দ করে। স্ট্রিংটিতে 'হ্যালো' স্টোর থাকলে have বাইট লাগবে, ৫ টি নয় St স্ট্রিং ম্যানিপুলেশন সর্বদা সব ক্ষেত্রে দৈর্ঘ্য পরীক্ষার কিছু ফর্ম করা উচিত।

আপনি দুটি কাজ করার সময় ট্রেডঅফটি আরও স্পষ্ট হয়:
১ লক্ষ বা বিলিয়ন বিলিয়ন সারিগুলি সংরক্ষণ করা
2. ইনচারেক্সিং কলামগুলি যা হয় চার বা ভ্রচার

ব্যবসায় # 1

স্পষ্টতই, ভেরচারের সুবিধা রয়েছে যেহেতু ভেরিয়েবল-দৈর্ঘ্যের ডেটা আরও কম সারি তৈরি করে এবং এভাবে ছোট্ট শারীরিক ফাইল তৈরি করে।

ব্যবসায় # 2

যেহেতু CHAR ক্ষেত্রগুলিকে স্থির ক্ষেত্রের প্রস্থের কারণে কম স্ট্রিং ম্যানিপুলেশন প্রয়োজন, তাই CHAR ক্ষেত্রের বিরুদ্ধে সূচকগুলি ভিউচআরআর ক্ষেত্রের তুলনায় গড়ে ২০% দ্রুত। এটি আমার পক্ষে কোনও অনুমান নয়। এটি প্রমাণ করার জন্য মাইএসকিউএল ডেটাবেস ডিজাইন এবং টিউনিং বইটি মাইআইএসএএম টেবিলে দুর্দান্ত কিছু সম্পাদন করেছে। বইয়ের উদাহরণ নীচের মত কিছু করেছে:

ALTER TABLE tblname ROW_FORMAT=FIXED;

এই নির্দেশিকা শক্তিগুলি CHARs হিসাবে আচরণ করার জন্য ভর্চার হয়। আমি 2007 সালে ফিরে আমার আগের কাজটিতে এটি করেছি এবং 300 গিগাবাইটের টেবিলটি নিয়েছি এবং অন্য কোনও পরিবর্তন ছাড়াই সূচী দৃষ্টিকোণ 20% বাড়িয়েছি। এটি প্রকাশিত হিসাবে কাজ করে। তবে এটি প্রায় দ্বিগুণ আকারের একটি টেবিল তৈরি করেছিল, তবে এটি কেবল ট্রেড অফ # 1 এ ফিরে যায়।

মাইএসকিউএল কলাম সংজ্ঞায়নের জন্য কী প্রস্তাব দেয় তা দেখতে আপনি সংরক্ষণ করা ডেটা বিশ্লেষণ করতে পারেন। যে কোনও টেবিলের বিরুদ্ধে কেবল নিম্নলিখিতটি চালান:

SELECT * FROM tblname PROCEDURE ANALYSE();

এটি পুরো টেবিলটি অতিক্রম করবে এবং এতে থাকা ডেটা, ন্যূনতম ক্ষেত্রের মান, সর্বাধিক ক্ষেত্রের মান এবং আরও কিছু উপর ভিত্তি করে প্রতিটি কলামের জন্য কলাম সংজ্ঞা প্রস্তাব করবে। কখনও কখনও, আপনাকে কেবল CHAR বনাম VARCHAR পরিকল্পনা করার সাথে সাধারণ জ্ঞান ব্যবহার করতে হবে। এখানে একটি ভাল উদাহরণ:

আপনি যদি আইপি ঠিকানাগুলি সঞ্চয় করে থাকেন তবে এই জাতীয় কলামের মুখোশ সর্বাধিক 15 টি অক্ষর (xxx.xxx.xxx.xxx)। আমি হার্টবিটটিতে ডানদিকে CHAR (15) এ ঝাঁপিয়ে পড়ব কারণ আইপি অ্যাড্রেসের দৈর্ঘ্য এত বেশি এবং অতিরিক্ত বাইট দ্বারা নিয়ন্ত্রিত স্ট্রিং ম্যানিপুলেশনের যুক্ত জটিলতা আলাদা হবে না। আপনি এখনও এই জাতীয় কলামের বিপরীতে একটি প্রক্রিয়া বিশ্লেষণ () করতে পারেন। এটি এমনকি VARCHAR সুপারিশ করতে পারে। আমার অর্থ এই মুহুর্তে ভ্রচারের তুলনায় CHAR এ থাকবে।

CHAR বনাম VARCHAR সমস্যাগুলি কেবল সঠিক পরিকল্পনার মাধ্যমে সমাধান করা যেতে পারে। দুর্দান্ত শক্তির সাথে মহান দায়িত্ব আসে (ক্লিচ তবে সত্য)


4
আপনি যদি আইপি অ্যাড্রেসগুলি সঞ্চয় করে থাকেন তবে আমি এগুলি কোনও ইনট ছাড়া অন্য কিছু হিসাবে সংরক্ষণ করার কোনও কারণ দেখতে পাচ্ছি না। এটাই সব আইপি ঠিকানা। অনেক ভাষায় কিছু ধরণের আইপি 2 ফাংশন থাকে। আপনি যদি কোনও কমান্ড লাইন কলটির সংযোগ চান তবে এবিসিডি রূপান্তর করতে কোনও স্টোরেজ পদ্ধতি তৈরি করা কঠিন নয়: একটি পাউড (256,3) + বি পাউ (256,2) + সি * 256 + ডি
এটক্সডবা

1
আমি আরও অনুমান করি যে মাইএসকিএল এর নিজস্ব আইপিন্ট ফাংশন রয়েছে: INET_ATON
atxdba

3
@ অ্যাটেক্সডবা: আমার উত্তরের বিন্দুটি কেবলমাত্র বনাম ভিআরএইচআরআর ব্যবহার করছে। আমি কেবল আইপিটিকে উদাহরণ হিসাবে ব্যবহার করি কারণ এর স্ট্রিং চরিত্রের আকার 15 এর কাছাকাছি Thus সুতরাং, ভর্চারের পক্ষে একটি স্থিতিশীল CHAR আকারটি গোল করা প্রশ্নটির নিজের পক্ষে কেবল একটি উদাহরণ। আইপি অ্যাড্রেসগুলি উপস্থাপনের আরও ভাল উপায় সম্পর্কে আপনার ভাষ্যটি বেশ কার্যকর এবং সঠিকভাবে বিবেচনা করা।
রোল্যান্ডোমাইএসকিউএলডিবিএ

CHAR (15) 15 টি অক্ষর বরাদ্দ করে , বাইটগুলি নয় । Utf8 এর জন্য, এটি 45 বাইট
রিক জেমস

2
যদিও এটি CHAR / VARCHAR তুলনা সম্পর্কে একটি ভাল উত্তর, প্রশ্নটি বিভিন্ন VARCHAR আকারের ছিল।
সংগ্রহকারী

13

এর উত্তর আসলে জটিল বরং। সংক্ষিপ্ত সংস্করণ: একটি পার্থক্য আছে

  1. ফিল্টার ফলাফলের জন্য অস্থায়ী সারণী তৈরি করার সময় (যেমন GROUP BYবিবৃতি), সম্পূর্ণ দৈর্ঘ্য বরাদ্দ করা হবে।

  2. তারের প্রোটোকল (ক্লায়েন্টকে সারি পাঠানো) সম্ভবত বৃহত্তর দৈর্ঘ্য বরাদ্দ করবে।

  3. স্টোরেজ ইঞ্জিন / যথাযথ ভার্চারটি প্রয়োগ করতে পারে না।

(২) আমি স্বীকার করি যে তারের প্রোটোকলটি আমার সাথে ঘনিষ্ঠভাবে পরিচিত নয়, তবে এখানে সাধারণ পরামর্শটি দৈর্ঘ্য অনুমান করার জন্য কমপক্ষে কিছু ন্যূনতম প্রচেষ্টা চেষ্টা করে প্রয়োগ করুন।


দেখানো মূল্যবান। মাইএসকিউএল 5.7 মান বাছাই করে বাফারে (পরিবর্তনশীল দৈর্ঘ্য) প্যাক করতে পারে। আরও বিশদে এখানে ব্যাখ্যা করা হয়েছে: mysqlserverteam.com/…
মরগান টকার

9

এই থ্রেডের বেশিরভাগ উত্তর 5 বছরের পুরানো, ইনোডিবি এর আগে লেখা এবং utf8 ডিফল্ট ছিল। তো, আমাকে আবার শুরু করা যাক ...

যখন কোনও প্রশ্নের কোনও অভ্যন্তরীণ অস্থায়ী টেবিলের প্রয়োজন হয় এটি একটি MEMORYটেবিলটি ব্যবহার করার চেষ্টা করে । তবে মেমোরিটি ব্যবহার করা যাবে না

  • TEXT/ BLOBকলামগুলি আনা হচ্ছে, এমনকি নয় TINYTEXT
  • VARCHAR কিছু পরিমাণের চেয়ে বড়, সম্ভবত বর্তমান সংস্করণে 512।

এছাড়াও, নোট যে VARCHARsরূপান্তরিত হয় CHARs। সুতরাং, VARCHAR(255)একটি সঙ্গে CHARACTER SET utf8765 বাইট, কি কলামে হয় নির্বিশেষে বিস্তৃতি। তারপরে, এটি ট্রিগার হতে পারে:

  • যদি MEMORYটেবিলটি হয় max_heap_table_size বা তার চেয়ে বড় হয়ে যায় tmp_table_size, এটি মাইআইএসএমে রূপান্তরিত হবে এবং সম্ভাব্যভাবে ডিস্কে ছড়িয়ে পড়বে।

সুতরাং, VARCHAR(25)থাকার সম্ভাবনা বেশি MEMORY, তাই দ্রুত হন। (255)হিসাবে ভাল না, এবং (64000)খারাপ।

(ভবিষ্যতে টেম্প টেবিলগুলি সম্ভবত থাকবে InnoDBএবং এই উত্তরের অংশটির সংশোধন করা দরকার))


6

একটি ভার্চার কলাম যা আকার পুরো টেবিলটিতে অস্থায়ী সারণী ব্যবহার করার সম্ভাবনা বেশি করে তোলে। হাই পারফরম্যান্স মাইএসকিউএল বই অনুসারে। অপ্টিমাইজার যখন এটি দেখার চেষ্টা করে যে এটি মেমরির মধ্যে এই কোয়েরিটি চালাতে পারে বা যদি এটি কোনও টেম্প টেবিলের প্রয়োজন হয়, তখন এটি সারণির সংজ্ঞা অনুসারে সারি আকারের দিকে তাকাবে, অর্থাত, গতির জন্য এটি K৪ কে অক্ষরের কতটা দেখার চেষ্টা করে না আপনি আসলে ব্যবহার করছেন। এ কারণেই লেখকরা আপনাকে সুপারিশ করেন যে কলামটিতে যে সম্ভাব্য সম্ভাব্য মান রয়েছে তার বাইরে সেই সংজ্ঞাটি প্রসারিত করবেন না। স্পষ্টতই, আপনি যদি টেম্প টেবিলগুলিতে গিয়ে আরও প্রশ্নের জন্য নিজেকে প্রস্তুত করেন (এমনকি যদি প্রকৃত ডেটার আকারটি র‍্যামের সাথে মাপসই করা যায়) তবে আপনি এখন I / O জরিমানাও এড়াতে পারবেন।


এটি একটি খুব তাজা দৃষ্টিকোণ। আপনি যে বইটি উল্লেখ করছেন এটি যদি ( অ্যামাজন / মাইএসকিউএল- উচ্চ- উপলভ্যতা- বিল্ডিং- কেন্দ্রগুলি / ডিপি / )) থাকে তবে দয়া করে আপনার উত্তরে বইয়ের পৃষ্ঠা নম্বরটি দিন, কারণ আমি এটি পড়তে চাই। +1 !!!
RolandoMySQLDBA

সিলি আমাকে ... হাই পারফরমেন্স না প্রাপ্যতা: amazon.com/High-Performance-MySQL-Optimization-Replication/dp/... ... পৃষ্ঠার নম্বর 236/237, বরং এটি ব্যাখ্যা করে কিভাবে varchar কলাম সংজ্ঞা উদারতা অপরিণামদর্শী হতে পারে। মনে রাখবেন যে এই বইটি যখন লেখা হয়েছিল তখন 5.1 ঠিক বাইরে ছিল। তৃতীয় সংস্করণ পরের বছর 5.5-তে সমস্ত বিগ পরিবর্তন অন্তর্ভুক্ত করার জন্য প্রকাশিত হচ্ছে যাতে সম্ভবত এটি পরিবর্তন হবে :)
টেকিগার্ল

পৃষ্ঠা 236-এ নির্দিষ্ট চর সেটগুলির অন্তর্ভুক্ত কোলেশন উল্লেখ রয়েছে। এটি ভ্রচারের জন্য এক ধরণের কদর্য হতে পারে। পৃষ্ঠা 237 এ, পৃষ্ঠা 238 পৃষ্ঠায় চিত্র 5-5 সহ ক্লায়েন্ট / সার্ভার যোগাযোগের জন্য সেটিংস অন্য কারণ দেখায়। চরিত্র অনুবাদ করার প্রক্রিয়া পিছনে পিছনে সেট করে। আবার, VARCHAR এর জন্য আরও একটি বাজে অ্যাডভেঞ্চার।
RolandoMySQLDBA

স্পষ্ট করে বলার জন্য, যদিও এই বিভাগটি পুরোপুরি মাইএসকিউএল আকার তৈরি করতে যাবে না তা আমরা জানি না, আমরা জানি যে যখন কোনও অপারেশনটিতে অস্থায়ী টেবিলের প্রয়োজন হয় যে টেবিলটি স্মৃতি ইঞ্জিনে থাকে এবং এটি সর্বদা ফিক্সগুলির অংশগুলিতে স্ট্রিংয়ের ধরণের সঞ্চয় করে তাই উদারভাবে সংজ্ঞা র‌্যামে থাকার বিপরীতে প্রয়োজনীয়
মেমরি

নিবন্ধন করুন হ্যাঁ ... এটিও ... কোলেশনটি এখানেও একটি ফ্যাক্টর হয়ে যায় (উদাহরণস্বরূপ আপনি যদি ইউটিএফ -8 ব্যবহার করেন এবং ল্যাটিন অক্ষর না রাখেন) এবং মেমরির ইঞ্জিনের টেবিলের সাথে কাজ করার সময় এটি সমস্তই খুন করে এবং ডিস্কে দ্রুততর ভ্রমণের দিকে পরিচালিত করে
টেকিগার্ল

5

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


3

আপনার ঘর থেকে দৌড়ে যাওয়ার বিষয়টি নিশ্চিত করুন

এই বাক্যাংশটি বোঝায় যে আপনি প্রশ্ন জিজ্ঞাসা করেছেন কারণ আপনি যে ডেটাবেসে ডাটাবেস সংরক্ষণ করবেন সে সম্পর্কে আপনি নিশ্চিত নন। যদি এটি সত্য হয় তবে যত তাড়াতাড়ি সম্ভব আপনি এটি সন্ধানের জন্য আপনাকে ভালভাবে পরিবেশন করা হবে, কারণ আপনার সক্ষমতা পরিকল্পনার জন্য এটি প্রয়োজন। আপনি যদি 000০০০ টি অক্ষর সহ ডেটা উপাদানগুলি পেয়ে যাচ্ছেন, উদাহরণস্বরূপ, আপনার এটি জানতে হবে কারণ এতে কোনও ডিবিএমএসে পারফরম্যান্সের প্রভাব থাকতে পারে।

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

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