মাইএসকিউএল আপনাকে প্রিফিক্সড ইনডেক্স সংজ্ঞায়িত করতে সক্ষম করে যার অর্থ আপনি সূচিত করতে মূল স্ট্রিং থেকে প্রথম এন অক্ষরকে সংজ্ঞায়িত করেছেন, এবং কৌশলটি এমন একটি এন নির্বাচন করতে হবে যা ভাল নির্বাচন করতে যথেষ্ট দীর্ঘ, তবে স্থান বাঁচাতে যথেষ্ট সংক্ষিপ্ত। আপনি পুরো কলামটি সূচিযুক্ত করে তুলতে সূচকটিকে প্রায় দরকারী হিসাবে উপস্থাপিত করতে যথেষ্ট দীর্ঘ হওয়া উচিত।
আরও এগিয়ে যাওয়ার আগে আসুন আমরা কয়েকটি গুরুত্বপূর্ণ পদ সংজ্ঞায়িত করি। ইনডেক্স সিলেক্টিভিটি মোট স্বতন্ত্র সূচকযুক্ত মান এবং সারিগুলির মোট সংখ্যার অনুপাত । পরীক্ষার সারণির জন্য এখানে একটি উদাহরণ রয়েছে:
+-----+-----------+
| id | value |
+-----+-----------+
| 1 | abc |
| 2 | abd |
| 3 | adg |
+-----+-----------+
আমরা যদি কেবলমাত্র প্রথম অক্ষরকে সূচী করি (এন = 1), তবে সূচীকরণ সারণী নিম্নলিখিত টেবিলের মতো দেখাবে:
+---------------+-----------+
| indexedValue | rows |
+---------------+-----------+
| a | 1,2,3 |
+---------------+-----------+
এই ক্ষেত্রে, সূচী নির্বাচনটি IS = 1/3 = 0.33 এর সমান।
আসুন এখন দেখা যাক আমরা যদি সূচী অক্ষরের সংখ্যা দুটি (এন = 2) বৃদ্ধি করি তবে কী হবে।
+---------------+-----------+
| indexedValue | rows |
+---------------+-----------+
| ab | 1,2 |
| ad | 3 |
+---------------+-----------+
এই দৃশ্যে আইএস = 2/3 = 0.66 যার অর্থ আমরা সূচকের নির্বাচনকে বাড়িয়েছি, তবে আমরা সূচকের আকারও বাড়িয়েছি। কৌশলটি হ'ল ন্যূনতম সংখ্যা এনটি সন্ধান করা যা সর্বাধিক সূচক নির্বাচনতে ফলাফল করবে ।
আপনার ডাটাবেস টেবিলের জন্য গণনা করতে পারেন এমন দুটি পদ্ধতি রয়েছে। আমি এই ডাটাবেস ডাম্প উপর বিক্ষোভ করব ।
ধরা যাক আমরা সূচীতে টেবিল কর্মীদের কলাম শেষের নামটি যুক্ত করতে চাই এবং আমরা সবচেয়ে কম সংখ্যক এন সংজ্ঞায়িত করতে চাই যা সেরা সূচক নির্বাচন করতে পারে।
প্রথমে সর্বাধিক ঘন ঘন শেষ নামগুলি শনাক্ত করা যাক:
select count(*) as cnt, last_name from employees group by employees.last_name order by cnt
+-----+-------------+
| cnt | last_name |
+-----+-------------+
| 226 | Baba |
| 223 | Coorg |
| 223 | Gelosh |
| 222 | Farris |
| 222 | Sudbeck |
| 221 | Adachi |
| 220 | Osgood |
| 218 | Neiman |
| 218 | Mandell |
| 218 | Masada |
| 217 | Boudaillier |
| 217 | Wendorf |
| 216 | Pettis |
| 216 | Solares |
| 216 | Mahnke |
+-----+-------------+
15 rows in set (0.64 sec)
আপনি দেখতে পাচ্ছেন, শেষ নাম বাবাকে সবচেয়ে বেশি ঘন ঘন বলা হয়। এখন আমরা সবচেয়ে বেশিবার যে এটি করতে যাচ্ছি LAST_NAME উপসর্গ, পাঁচটি অক্ষর উপসর্গ থেকে শুরু করে।
+-----+--------+
| cnt | prefix |
+-----+--------+
| 794 | Schaa |
| 758 | Mande |
| 711 | Schwa |
| 562 | Angel |
| 561 | Gecse |
| 555 | Delgr |
| 550 | Berna |
| 547 | Peter |
| 543 | Cappe |
| 539 | Stran |
| 534 | Canna |
| 485 | Georg |
| 417 | Neima |
| 398 | Petti |
| 398 | Duclo |
+-----+--------+
15 rows in set (0.55 sec)
প্রতিটি উপসর্গের আরও অনেকগুলি উপস্থিতি রয়েছে যার অর্থ পূর্ববর্তী উদাহরণের মতো মানগুলি প্রায় সমান না হওয়া পর্যন্ত আমাদের N সংখ্যা বৃদ্ধি করতে হবে।
এখানে এন = 9 এর ফলাফল রয়েছে
select count(*) as cnt, left(last_name,9) as prefix from employees group by prefix order by cnt desc limit 0,15;
+-----+-----------+
| cnt | prefix |
+-----+-----------+
| 336 | Schwartzb |
| 226 | Baba |
| 223 | Coorg |
| 223 | Gelosh |
| 222 | Sudbeck |
| 222 | Farris |
| 221 | Adachi |
| 220 | Osgood |
| 218 | Mandell |
| 218 | Neiman |
| 218 | Masada |
| 217 | Wendorf |
| 217 | Boudailli |
| 216 | Cummings |
| 216 | Pettis |
+-----+-----------+
এখানে এন = 10 এর ফলাফল রয়েছে।
+-----+------------+
| cnt | prefix |
+-----+------------+
| 226 | Baba |
| 223 | Coorg |
| 223 | Gelosh |
| 222 | Sudbeck |
| 222 | Farris |
| 221 | Adachi |
| 220 | Osgood |
| 218 | Mandell |
| 218 | Neiman |
| 218 | Masada |
| 217 | Wendorf |
| 217 | Boudaillie |
| 216 | Cummings |
| 216 | Pettis |
| 216 | Solares |
+-----+------------+
15 rows in set (0.56 sec)
এটি খুব ভাল ফলাফল। এর অর্থ এই যে আমরা কলামে সূচক করতে পারেন LAST_NAME শুধুমাত্র প্রথম 10 অক্ষর ইন্ডেক্স সঙ্গে। সারণীতে সংজ্ঞা কলাম LAST_NAME হিসাবে সংজ্ঞায়িত করা হয় VARCHAR(16)
, এবং এই মাধ্যম আমরা 6 বাইট সংরক্ষণ করেছেন (বা আরো যদি গত নামে UTF8 হওয়া অক্ষর) এন্ট্রি প্রতি। এই টেবিলটিতে 1679 স্বতন্ত্র মানগুলি 9 বাইট দ্বারা 6 বাইট দ্বারা গুণিত হয় এবং কল করুন যে এই সংখ্যাটি কীভাবে বাড়বে যদি আমাদের টেবিলটিতে কয়েক মিলিয়ন সারি থাকে।
আপনি আমার পোস্টে মাইএসকিউএলে প্রিফিক্সড ইনডেক্সগুলিতে এন নম্বর গণনা করার অন্যান্য উপায়গুলি পড়তে পারেন ।
সূচকযুক্ত হওয়া উচিত এমন মান উত্পন্ন করতে MD5 এবং SHA1 ফাংশন ব্যবহার করাও ভাল পন্থা নয় । কেন? এটি পোস্টে পড়ুন কীভাবে মাইএসকিউএল ডাটাবেসে একটি প্রাথমিক কী জন্য সঠিক তথ্য টাইপ চয়ন করতে হয়