বিভাজন রোধ করতে এবং কিছু প্রশ্নের প্রয়োগ কার্যকর করতে মাইএসকিউএলে সূচকগুলি কীভাবে বজায় রাখা যায় সে সম্পর্কে আমি অনেক গবেষণা করেছি।
আমি সেই সূত্রের সাথে পরিচিত যা একটি সারণী ভিএসের জন্য সর্বাধিক স্থানের ডেটা এবং সূচী দ্বারা ব্যবহৃত স্থানের মধ্যে অনুপাত গণনা করে।
তবে আমার প্রধান প্রশ্নগুলি এখনও উত্তরহীন। সম্ভবত এটি এসকিউএল সার্ভারে সূচী রক্ষণাবেক্ষণের সাথে আমার পরিচিত এবং এই কারণেই আমার মনে হয় যে মাইএসকিউএলে এটি কোনওরকম সাদৃশ্যপূর্ণ হওয়া উচিত।
এসকিউএল সার্ভারে আপনার বেশ কয়েকটি সূচী থাকতে পারে এবং এর প্রতিটিটির আলাদা আলাদা স্তর থাকতে পারে। তারপরে আপনি একটি বাছাই করতে পারেন এবং বাকিগুলিকে প্রভাবিত না করে নির্দিষ্ট সূচকটিতে একটি 'পুনর্গঠিত' বা 'পুনরায়' অপারেশন করতে পারেন।
আমার জ্ঞানের সর্বোপরি, এখানে কোনও 'টেবিল বিভাজন' নেই এবং এসকিউএল সার্ভার 'টেবিলের খণ্ডন' ঠিক করার জন্য কোনও সরঞ্জাম সরবরাহ করে না। এটি যা সরবরাহ করে তা হ'ল সূচি বিভাজন (যা কোনও সূচী ভিএস দ্বারা ব্যবহৃত পৃষ্ঠাগুলির সংখ্যার অনুপাতের মতো বোঝা যায় that পৃষ্ঠার পূর্ণতা এবং স্বচ্ছলতা), পাশাপাশি অভ্যন্তরীণ এবং বাহ্যিক খণ্ড খণ্ডন করে।
এগুলি সমস্ত কিছু বোঝার পক্ষে আমার পক্ষে কমপক্ষে সহজবোধ্য।
এখন, যখন মাইএসকিউএল সূচকগুলি বজায় রাখার পালা আসে, কেবল উপরে উল্লিখিত হিসাবে কেবল 'টেবিলের খণ্ডন' ধারণাটি বিদ্যমান।
মাইএসকিউএলে থাকা একটি সারণীতে বেশ কয়েকটি সূচী থাকতে পারে, কিন্তু যখন আমি সেই বিখ্যাত সূত্রটি দিয়ে 'ফ্র্যাগমেন্টেশন রেশিও' পরীক্ষা করি, আমি প্রতিটি সূচির খণ্ডন দেখতে পাই না, পুরো টেবিলটি।
আমি যখন মাইএসকিউএল সূচকগুলি অপ্টিমাইজ করতে চাই তখন আমি কাজ করতে কোনও নির্দিষ্ট সূচক পছন্দ করি না (এসকিউএল সার্ভারের মতো)। পরিবর্তে, আমি পুরো টেবিলটিতে একটি 'অপ্টিমাইজ' অপারেশন করি, যা সম্ভবত সমস্ত সূচককে সম্ভবত প্রভাবিত করে।
যখন টেবিলটি মাইএসকিউএলে অনুকূলিত হয়, তখন ডেটা + সূচক ভিএস দ্বারা ব্যবহৃত স্থানের মধ্যে অনুপাত হ্রাস হয়, যা হার্ড ড্রাইভে কিছু ধরণের শারীরিক পুনঃ-সংগঠনের পরামর্শ দেয় যা শারীরিক স্থান হ্রাস করার জন্য অনুবাদ করে। তবে সূচি খণ্ডন কেবল শারীরিক স্থান সম্পর্কেই নয়, সন্নিবেশ এবং আপডেটের কারণে গাছের কাঠামোটি সময়ের সাথে পরিবর্তিত হয়েছে।
অবশেষে, আমি InnoDB / MySQL এ একটি টেবিল পেয়েছি। এই টেবিলটিতে 3 মিলিয়ন রেকর্ড, 105 কলাম এবং 55 সূচি রয়েছে। এটি সূচকগুলি বাদ দিয়ে 1.5 জিবি, যা 2.1 জিবি।
আপডেট করতে, সন্নিবেশ করানোর জন্য সেই টেবিলটি দিনের হাজার হাজার বার আঘাত হানছে (আমরা আসলে রেকর্ডগুলি মুছিনা)।
এই টেবিলটি কয়েক বছর যাবত তৈরি হয়েছে এবং আমি নিশ্চিত জানি যে কেউ কোনও সূচি বজায় রাখছে না।
আমি সেখানে একটি বিশাল টুকরো টুকরোটি খুঁজে প্রত্যাশা করছিলাম, তবে আমি যখন নির্ধারিত হিসাবে খণ্ডন গণনা সম্পাদন করি
free_space / (data_length + index_length)
দেখা যাচ্ছে যে আমার কাছে কেবলমাত্র 0.2% টুকরো টুকরো আছে। আইএমএইচও এটি বেশ অবাস্তব।
সুতরাং বড় প্রশ্নগুলি হ'ল:
- আমি কীভাবে মাইএসকিউএলে কোনও নির্দিষ্ট সূচীর টুকরো টুকরো টেকসই করব, পুরো টেবিলটি নয়
- টেবিল অপটিমাইজ করা কি আসলে এসকিউএল সার্ভারের মতো কোনও সূচকের অভ্যন্তরীণ / বাহ্যিক খণ্ড স্থির করে?
- আমি যখন মাইএসকিউএল-তে কোনও টেবিলটি অনুকূলিত করি তখন এটি কি টেবিলের সমস্ত সূচী পুনর্নির্মাণ করে?
- এটা কি ভাবা বাস্তববাদী যে কোনও সূচকের শারীরিক স্থান হ্রাস (গাছ নিজেই পুনর্নির্মাণ না করা) আসলে আরও ভাল পারফরম্যান্সে অনুবাদ করে?