ইনডেক্সিং (Indexing) : ডেটাবেসে যখন বিশাল পরিমান ডেটা হয়ে যায় তখন কোন টেবিল কোয়েরি করলে সেটা খুব ধীরগতির হয়ে যায়।হবেইতো কারন একটা টেবিলে যদি লক্ষ লক্ষ সারি (row) থাকে তাহলে সেখান থেকে একটা শব্দ বের করতে ইন্জিনকে পুরো ডেটাগুলি পড়তে হয়।যাইহোক এসব সমস্যা সমাধানের জন্য ইনডেক্সিং করা হয়।তো ইনডেক্সিং এর সুবিধাসমূহ হল
১. কোয়েরি অপটিমাইজেশন : অনেক ডেটা হলেও কোয়েরি খুব দ্রুত চলবে ফলে searching দ্রুততর হবে। শুধু SELECT স্টেটমেন্টগুলি দ্রুত কাজ করে।
২. প্রত্যেকটি সারি একটি থেকে আরেকটি আলাদাভাবে চেনা যায়
বহুল ব্যবহৃত ইনডেক্সের মধ্যে আছে প্রাইমারী কি ইনডেক্স, ইউনিক কি ইনডেক্স, নরমাল বা সাধারন ইনডেক্স এবং ফুল টেক্সট ইনডেক্স
একটা অসুবিধাও আছে ইনডেক্সিং করলে তা হচ্ছে যদি টেবিলটি ঘন ঘন সম্পাদনা, ডিলিট ইত্যাদি করেন তাহলে পরে ডেটাবেসে অন্যান্য অপারেশনের সময় পারফমেন্স কম হবে।
যে ধরনের কলামগুলিতে ইনডেক্স করবেন:
যেকোন কলামকে ইনডেক্স করতে পারেন। তবে একটা ট্রিকস হচ্ছে ঐসব কলামগুলিকে ইনডেক্স বানান যেগুলি কোয়েরিতে WHERE পর বা ORDER BY এর সাথে ব্যবহার করবেন।
** কোন টেবিলে যদি অনেক ডেটা থাকে শুধু তাহলেই ইনডেক্স ব্যবহার করুন। কারন অনেক ডেটা থাকলে SELECT স্টেটমেন্ট দেরিতে কাজ করে এবং এই দেরি সরানোর জন্যই ইনডেক্সিং করা হয়।
** ছোটখাট টেবিলে ইনডেক্সিং করার দরকার নেই (প্রাইমারী কি ছাড়া) কারন ইনডেক্সিং করলে INSERT, UPDATE স্টেটমেন্ট আবার ধীরগতির হয়ে যায়।
PHPMyAdmin দিয়ে ইনডেক্সিং করা যায়। এজন্য ডেটাবেসটি সিলেক্ট করে যে টেবিলে ইনডেক্স দিবেন সেটা নির্বাচন করুন এরপর “Structure” ট্যাবে ক্লিক করলেই নিচের ছবির মত উইন্ডো আসবে।
ছবিতে ডানে দেখুন “Action” নামের অংশে ক্রস চিহ্নের পর থেকে সবগুলি আইকন এক একটা ইনডেক্সে তৈরীর জন্য। চাবির মত দেখতে আইকনটি ক্লিক করলে ঐ কলামটি প্রাইমারি কি ইনডেক্স হয়ে যাবে। সাধারনত এরপরের আইকন যেটাতে “U” চিহ্ন দেখতে পাচ্ছেন সেটা ইউনিক কি ইনডেক্স বানানোর জন্য।এরপরেরটা একটা নরমাল ইনডেক্স তৈরীর জন্য এবং শেষেরটা ফুল টেক্সট ইনডেক্স তৈরীর জন্য।যাইহোক এখানে উপরের “posts” টেবিলটি সাধারন একটি টেবিল এবং এখানে শুধু উদাহরন দেখানোর জন্য “title” কলামে ইউনিক ইনডেক্স তৈরী করেছি।
** “Details…” লিংক থেকে ইনডেক্সের নামও দিতে (উপরের ছবির মত আসলেই একটু নিচেই Details লিংক) পারেন, বাম দিকে “Edit” লিংকে ক্লিক করলেই ইনডেক্সের নাম পরিবর্তনের অপশন আসবে। উপরের ছবির মত যদি ডানদিকের আইকনগুলি ক্লিক করে করে ইনডেক্স বানান তাহলে বাই ডিফল্ট ফিল্ড/কলামের নামটাই ইনডেক্সের নাম হয়ে থাকে।
যে ইনডেক্সগুলি তৈরী করবেন সেগুলি দেখতে পারেন ঠিক নিচেই “Details..” লিংকে ক্লিক করে। কোন কলামে কোন ইনডেক্স দিয়েছেন সেগুলির সব তথ্য সেখানে পাবেন।
SQL দিয়ে ইনডেক্সিং
যে টেবিলটি নিয়ে কথা বলছি সেটার কোড
1.
CREATE
TABLE
IF
NOT
EXISTS `posts` (
2.
`id`
int
(11)
NOT
NULL
AUTO_INCREMENT,
3.
`title`
varchar
(200)
NOT
NULL
,
4.
`posted_at` datetime
NOT
NULL
,
5.
PRIMARY
KEY
(`id`)
6.
) ENGINE=InnoDB
DEFAULT
CHARSET=latin1 AUTO_INCREMENT=2 ;
এখন ধরুন “posted_at” কলামটি ইনডেক্স বানাবো তাহলে নিচের মত কোড লিখুন
1.
CREATE
UNIQUE
INDEX
unique_title
ON
posts (title);
unique_title হচ্ছে নাম যেটা আমি দিয়েছি আর আপনি চাইলে “title” এর পর কমা দিয়ে আরও ফিল্ড/কলামের নাম দেন তাহলে ঐসব কলামগুলি এই কোয়েরি দিয়েই ইউনিক ইনডেক্স হয়ে যাবে। ON এর পর টেবিলের নাম।
যদি কোন ইনডেক্স মুছতে চান
1.
ALTER
TABLE
posts
DROP
INDEX
unique_title;