একটি পূর্ণ মান সূচিবদ্ধ মাইএসকিউএল নামঞ্জুর করে BLOB
, TEXT
এবং দীর্ঘ VARCHAR
কলাম কারণ তথ্য সেগুলির মধ্যে উপস্থিত বিশাল হতে পারে, এবং পরোক্ষভাবে ডিবি সূচক বড় হবে, সূচী থেকে কোন সুবিধা, যার অর্থ।
মাইএসকিউএলকে প্রয়োজনীয় যে আপনি সূচীকরণের জন্য প্রথম এন অক্ষরগুলি সংজ্ঞায়িত করুন, এবং কৌশলটি এমন একটি এন নির্বাচন করা উচিত যা ভাল নির্বাচন করতে যথেষ্ট দীর্ঘ, তবে স্থান বাঁচাতে যথেষ্ট সংক্ষিপ্ত। আপনি পুরো কলামটি সূচিযুক্ত করে তুলতে সূচিটিকে প্রায় দরকারী হিসাবে উপস্থাপিত করতে যথেষ্ট দীর্ঘ হওয়া উচিত।
আরও এগিয়ে যাওয়ার আগে আসুন আমরা কয়েকটি গুরুত্বপূর্ণ পদ সংজ্ঞায়িত করি। ইনডেক্স সিলেক্টিভিটি মোট স্বতন্ত্র সূচকযুক্ত মান এবং সারির মোট সংখ্যার অনুপাত । পরীক্ষার সারণির জন্য এখানে একটি উদাহরণ রয়েছে:
+-----+-----------+
| 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 যার অর্থ আমরা সূচকের নির্বাচনকে বাড়িয়েছি, তবে আমরা সূচকের আকারও বাড়িয়েছি। কৌশলটি হ'ল ন্যূনতম সংখ্যা N সন্ধান করা যা ফলস্বরূপ সর্বাধিক সূচক নির্বাচন করতে হবে ।
আপনার ডাটাবেস টেবিলের জন্য গণনা করতে পারেন এমন দুটি পদ্ধতি রয়েছে। আমি এই ডাটাবেস ডাম্প উপর বিক্ষোভ করব ।
ধরা যাক আমরা সূচীতে টেবিল কর্মীদের কলাম শেষের নামটি যুক্ত করতে চাই এবং আমরা সবচেয়ে কম সংখ্যক এন সংজ্ঞায়িত করতে চাই যা সেরা সূচক নির্বাচনের উত্পাদন করবে।
প্রথমে সর্বাধিক ঘন ঘন শেষ নামগুলি শনাক্ত করা যাক:
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 টি বাইট (বা শেষ নামটিতে ইউটিএফ 8 অক্ষর থাকলে বেশি) সংরক্ষণ করেছি। এই টেবিলটিতে 1679 স্বতন্ত্র মানগুলি 6 বাইট দ্বারা গুণিত হয় প্রায় 9KB, এবং আমাদের টেবিলটিতে কয়েক মিলিয়ন সারি থাকে তবে এই সংখ্যাটি কীভাবে বাড়বে তা কল্পনা করুন।
আপনি আমার পোস্টে মাইএসকিউএলে প্রিফিক্সড ইনডেক্সগুলিতে এন নম্বর গণনা করার অন্যান্য উপায়গুলি পড়তে পারেন ।
UNIQUE
কী রয়েছে?