উত্তর:
Gen_clust_index (ক্লাস্টার INDEX) InnoDB ফণা অধীন rowids সহ প্রাথমিক কী এন্ট্রি ঘর। জিন_ক্লাস্ট_আইএনডেক্সের ব্যবহার সম্পর্কে আকর্ষণীয় বিষয়টি হ'ল আপনি যে অনন্য-অনন্য সূচকগুলি তৈরি করেন তা সর্বদা একটি সারণির জেন_ ক্লাস্ট_ইন্ডেক্সের সাথে একইরকম সারিযুক্ত থাকে। সুতরাং, সর্বদা ডাবল ইনডেক্স লুক্কুল হয়, একটি মাধ্যমিক সূচক এবং একটি জেন_ ক্লাস্ট_ইন্ডেক্সের জন্য।
টেবিল বা প্রাথমিক কী এর বিন্যাস উন্নত করার জন্য যে কোনও প্রচেষ্টা জেন_ ক্লাস্ট_ইন্ডেক্স বা কমপক্ষে অন্তত প্রান্তিক ফলাফলের কারণে বাতিল হয়ে যায়।
EXAMPLE টি
কিছু লোক প্রাথমিক কী ক্রমে একটি মাইআইএসএএম বাছাই করার চেষ্টা করে। মতে মাইএসকিউএল ডাটাবেজ ডিজাইন এবং টিউনিং, পৃষ্ঠা 236 অনুচ্ছেদ 7, উপশিরোনামের নীচে দেওয়া "ইনডেক্স যাতে একটি ছক সংরক্ষণ":
যদি আপনি প্রায়শই কোনও টেবিল থেকে সূচকযুক্ত ডেটাগুলির বৃহত পরিসীমা পুনরুদ্ধার করেন বা একই সূচি কীতে ধারাবাহিকভাবে ফলাফলগুলি সাজান, আপনি --sort- রেকর্ড বিকল্পের সাহায্যে মাইস্যামচক চালানো বিবেচনা করতে পারেন। এটি করা মাইএসকিউএলকে সূচকের মতো একই শারীরিক ক্রমে টেবিলের ডেটা সাজানোর জন্য বলুন এবং এই ধরণের ক্রিয়াকলাপকে গতিতে সহায়তা করতে পারে। বিকল্পভাবে, আপনি একই ফলাফল অর্জনের জন্য একটি নির্দিষ্ট কলাম বিকল্পের মাধ্যমে একটি অর্ডার দিয়ে অল্টার টেবিল বিবৃতিটি একত্রিত করতে পারেন।
মঞ্জুর, এটি কাজ করে এবং কার্যকরভাবে মাইসামের জন্য কাজ করে । আপনি আয়নার টেবিলে ... অর্ডার কোল 1, কল 2, ..., কোলন ইনোডিবি-র বিপরীতে করতে পারেন যেখানে কলামগুলি প্রাথমিক কী হতে পারে বা নাও হতে পারে। এটি InnoDB এর জন্য দ্রুত ফলাফল আনবে না কারণ ... এটি ঠিক ... আপনার অবশ্যই প্রতিবার জিন_ক্লাস্ট_আইডেক্সের সাথে পরামর্শ করা উচিত।
কিছু লোক ব্যবহার করে টেবিলের সারি বিন্যাসটিকে ফিক্সড ALTER TABLE mydb.mytb ROW_FORMAT=Fixed;
করতে পারে এবং অন্য কোনও পরিবর্তন ছাড়াই পঠন কার্য সম্পাদনে 20% বৃদ্ধি পেতে পারে। এটি মাইসামের পক্ষে কার্যকরভাবে কাজ করে এবং কাজ করে । এটি InnoDB এর জন্য দ্রুত ফলাফল আনবে না কারণ ... এটি ঠিক ... আপনার অবশ্যই প্রতিবার জিন_ক্লাস্ট_আইডেক্সের সাথে পরামর্শ করা উচিত।
আপনি mydb.mytb নামে একটি InnoDB টেবিলে নিম্নলিখিত সম্পাদন করতে পারেন:
CREATE TABLE mydb.mytc LIKE mydb.mytb;
INSERT INTO mydb.mytc SELECT * FROM mydb.mytb ORDER BY col1,col2,...coln;
ALTER TABLE mydb.mytb RENAME mydb.mytd;
ALTER TABLE mydb.mytc RENAME mydb.mytb;
DROP TABLE mydb.mytd;
এটি জিন_ক্লাস্ট_আইডেক্সে সারণীটিকে সারিবদ্ধ ক্রমে রাখবে। এটি InnoDB এর পক্ষে সর্বোত্তম প্রান্তিক ফলাফল আনতে পারে কারণ ... এটি ঠিক ... আপনার অবশ্যই প্রতিবার জেন_ক্লাস্ট_আইডেক্সের সাথে পরামর্শ করা উচিত।
এখন, কিছুটা হাস্যকর হয়ে উঠি। মাইআইএসএএম এবং ইনোডিবি কে হ্যান্ডলারসকেট (পূর্বে বলা হত হানল্ডার) ইন্টারফেস বলে জিজ্ঞাসা করার জন্য একটি নোএসকিউএল ইন্টারফেস রয়েছে । এটি আপনাকে এমন ডেটাতে অ্যাক্সেস দেয় যা আপনাকে সমস্ত এসকিউএল, এসিডি , এবং এমভিসিসি প্রোটোকল বাইপাস করতে দেয় । যদিও এটি সম্ভব, তবে কোড এবং রক্ষণাবেক্ষণের জন্য অত্যন্ত জটিল IM এএআইএএআইডিকি হ্যান্ডলারসকেট ইন্টারফেসটি জেন_ ক্লাস্ট_ইন্ডেক্সের সাথে মিথস্ক্রিয়া করছে কিনা তা উল্লেখ করে প্রিন্টের কিছু নেই।
সংক্ষেপে, বিড়ালকে ত্বকে নেওয়ার বিভিন্ন উপায় রয়েছে। এই ক্ষেত্রে, আপনি বিড়ালকে ধরে রাখতে পারবেন না (জেন_ ক্লাস্ট_আইডেক্স)। আমার ধারণা এই কারণেই মাইআইএসএএম এর পঠন কার্য সম্পাদন, টেবিল ক্রম, টেবিলে সারি বিন্যাস এবং এর সমর্থনে সরঞ্জামগুলির জন্য তার অস্তিত্ব বজায় রাখে। কিছু সাহসী আত্মা ইনোডিবি উত্স কোড গ্রহণ না করে এবং এটিকে এমন কিছুতে রূপান্তর না করে অবধি মাইআইএসএএম এবং ইনোডিবি উভয়ই উন্নত করে না হওয়া অবধি ইনোডিবি তার এসিডি -অনুগত প্রকৃতির চারপাশে নকশাকৃত থাকবে ।
ক্লাস্টার সূচক সম্ভবত ঐতিহ্যগত স্পিন-ড্রাইভের মধ্যে উপস্থিত InnoDB এর সম্পাতবিন্দু পারফরম্যান্সের জন্য কারণ।
ক্লাস্টারড ইনডেক্সের মাধ্যমে একটি সারি অ্যাক্সেস করা দ্রুত কারণ সারি তথ্য একই পৃষ্ঠায় যেখানে সূচী অনুসন্ধানে নেতৃত্ব দেয়। যদি কোনও টেবিলটি বড় হয় তবে ক্লাস্টার্ড সূচক আর্কিটেকচারটি প্রায়শই ডিস্ক আই / ও ক্রিয়াকলাপ সংরক্ষণ করে যখন স্টোরেজ সংস্থাগুলির সাথে তুলনা করা হয় যা সূচক রেকর্ড থেকে আলাদা পৃষ্ঠা ব্যবহার করে সারি ডেটা সঞ্চয় করে। (উদাহরণস্বরূপ, মাইআইএসএএম ডেটা সারিগুলির জন্য একটি ফাইল এবং অন্য সূচক রেকর্ডের জন্য ব্যবহার করে))
ডিস্ক I / O ব্যয়বহুল। সুতরাং এটি হ্রাস করা সামঞ্জস্যের উন্নতির জন্য একটি বিশাল সুবিধা।
যদি ডিস্ক I / O সস্তার হয়ে যায় এবং একটি অচেতনার কম হয়ে যায় (যেমন, এসএসডি প্রযুক্তি আরও স্থিতিশীল হয়ে ওঠে), ওরাকল ইনোডিবি সূচকগুলি কীভাবে কাজ করবে তা পরিবর্তন করার সিদ্ধান্ত নিতে পারে। সম্ভবত এটি একই থাকবে, কারণ একই প্রযুক্তি কোনও ইস্যুকে 'র্যামের সীমাবদ্ধতা' কম তৈরি করবে।
সংক্ষিপ্ত উত্তর: না
প্রাথমিক কী এর মাধ্যমে InnoDB ক্লাস্টারগুলি, এবং প্রাথমিক কীটির অভাবে, এটি প্রথম অনন্য সূচকটি পছন্দ করে। অনন্য সূচকের অনুপস্থিতিতে এটি ক্লাস্টারিংয়ের জন্য একটি লুকানো 6 বাইট কী তৈরি করে।
যখন আপনার কাছে 6 টি বাইট কী লুকানো আছে, তখন কোনও মাধ্যমিক সূচকগুলি এই সারিটি চিহ্নিত করে সারি অবস্থানগুলিতে (মাইআইএসএএম হিসাবে) সঠিক পয়েন্টারগুলির চেয়ে বেশি হয়, তাই আপনার রেকর্ডগুলি সন্ধানের জন্য একটি প্রাথমিক কী ট্র্যাভারসাল এবং তারপরে একটি প্রাথমিক কী ট্র্যাভারসাল সমাপ্ত হয় you ।
আপনার প্রশ্ন থেকে কিছুটা বাড়িয়ে দেওয়ার জন্য, আমি ধরে নিচ্ছি যে আপনি একটি বৃক্ষের সাথে মেমরি ফিট করার বিষয়ে চিন্তিত রয়েছেন, কারণ দক্ষতার সাথে অনুসন্ধান করার জন্য, সমস্ত মূল নোড স্মৃতিতে থাকা উচিত, যেহেতু আপনার পাতার পৃষ্ঠাগুলি সন্ধান করার জন্য আপনাকে সর্বদা এই পথে চলতে হবে?
এটি সত্য, তবে একটি সান্ত্বনা হ'ল বাণিজ্যিক ডাটাবেসগুলি তাদের গাছগুলিকে গভীর না করে যতটা সম্ভব চর্বিযুক্ত করার চেষ্টা করে। আপনার ডেটাতে xtrabackup - স্ট্যাটগুলি চালানোর চেষ্টা করুন । উদাহরণ স্বরূপ:
<INDEX STATISTICS>
table: test/table1, index: PRIMARY, space id: 12, root page 3
estimated statistics in dictionary:
key vals: 25265338, leaf pages 497839, size pages 498304
real statistics:
level 2 pages: pages=1, data=5395 bytes, data/pages=32%
level 1 pages: pages=415, data=6471907 bytes, data/pages=95%
leaf pages: recs=25958413, pages=497839, data=7492026403 bytes, data/pages=91%
সেখানে 497839 পাতাগুলি (GB 8 গিগাবাইট) ছিল, তবে উপরে মাত্র 6 416 পৃষ্ঠাগুলি (.5.৫ এমবি)। আমি উত্পাদনের ডেটাতে কয়েকবার এই কমান্ডটি চালিয়েছি এবং যখন আমার কাছে কয়েক মিলিয়ন-বিলিয়ন রেকর্ড রয়েছে এবং কেবল মাত্র 1-3 টি পৃষ্ঠা + পাতাগুলি থাকে তখন তা আমাকে সর্বদা অবাক করে দেয়।