Index হলো একটি ডেটাবেস অবজেক্ট যা ডেটাবেস টেবিলের ডেটাকে দ্রুত অনুসন্ধান (search) এবং অ্যাক্সেস করতে সাহায্য করে। সাধারণত, Index ডেটাবেসে তৃতীয় পক্ষের তথ্যসংগ্রহ হিসেবে কাজ করে, যার মাধ্যমে আপনি টেবিলের ডেটা দ্রুত খুঁজে বের করতে পারেন। এটি ডেটাবেসের কর্মক্ষমতা বৃদ্ধি করতে সহায়ক, বিশেষ করে যখন ডেটা ভলিউম খুব বড় হয়। Index আপনার টেবিলের এক বা একাধিক কলামে তৈরি করা যায়।
1. Index এর উদ্দেশ্য
Index এর মূল উদ্দেশ্য হলো ডেটাবেসের একটি টেবিলের মধ্যে ডেটা খোঁজা (search) দ্রুততর করা। যদি কোনো কলামে Index তৈরি করা থাকে, তবে ঐ কলামের মান অনুসন্ধান করা অনেক দ্রুত হয়, কারণ Index এর মাধ্যমে ডেটাবেস সার্চের কাজ করার জন্য একটি অব্যবহৃত "অর্ডারড লিস্ট" তৈরি হয়। Index এর মাধ্যমে আপনি SELECT, UPDATE, DELETE কোয়েরি দ্রুত সম্পাদন করতে পারেন।
2. Index এর প্রকারভেদ
প্রধানত দুটি প্রকারের Index ব্যবহৃত হয়:
- Clustered Index
- Non-Clustered Index
3. Clustered Index
Clustered Index হল একটি প্রকারের Index যেখানে টেবিলের ডেটা ফিজিক্যালি (actual data) সাজানো হয়। যখন আপনি একটি Clustered Index তৈরি করেন, তখন টেবিলের ডেটা Index key এর ভিত্তিতে পুনঃসংগঠিত হয়ে যায়। একটি টেবিলের মধ্যে সর্বাধিক একটিই Clustered Index থাকতে পারে, কারণ টেবিলের ডেটা একটি নির্দিষ্ট অর্ডারে সাজানো থাকে এবং এটি একাধিকভাবে সাজানো সম্ভব নয়।
Clustered Index এর বৈশিষ্ট্য:
- Physical Ordering: Clustered Index ডেটাবেসে ডেটার ফিজিক্যাল অর্ডার পরিবর্তন করে।
- Primary Key Constraint: সাধারণত Primary Key বা Unique Key কলামের সাথে Clustered Index তৈরি হয়, কারণ এগুলোর মান ইউনিক এবং ধারাবাহিকভাবে সাজানো থাকে।
- Performance: যখন আপনি একটি নির্দিষ্ট কলামে ডেটা সার্চ করবেন, Clustered Index সেক্ষেত্রে অনেক দ্রুত ফলাফল দিতে পারে। তবে, ডেটা আপডেট বা ইনসার্ট করার সময় Clustered Index কিছুটা ধীর হতে পারে, কারণ ডেটাকে শারীরিকভাবে পুনঃসংগঠিত করতে হয়।
উদাহরণ:
CREATE CLUSTERED INDEX idx_customer_id
ON Customers (CustomerID);
এখানে, CustomerID কলামের ওপর Clustered Index তৈরি করা হয়েছে, এবং এতে Customers টেবিলের ডেটা ওই কলাম অনুযায়ী শারীরিকভাবে সাজানো হবে।
4. Non-Clustered Index
Non-Clustered Index হল একটি পৃথক ডেটা স্ট্রাকচার যা টেবিলের ডেটার বাইরে থাকে। Non-Clustered Index মূলত একটি "সূচী" বা "তথ্য অনুসন্ধান তালিকা" (lookup table) যা index key এর মান এবং সেই মানের সাথে সংশ্লিষ্ট ডেটার লোকেশন (pointers) ধারণ করে। টেবিলের মূল ডেটা অপরিবর্তিত থাকে এবং Non-Clustered Index তৈরি হলে ডেটার ফিজিক্যাল অর্ডার পরিবর্তন হয় না।
Non-Clustered Index এর বৈশিষ্ট্য:
- Logical Ordering: Non-Clustered Index ডেটাবেসে ডেটার ফিজিক্যাল অর্ডার পরিবর্তন করে না।
- Multiple Indexes: একটি টেবিলে একাধিক Non-Clustered Index থাকতে পারে।
- Performance: Non-Clustered Index এর মাধ্যমে আপনি বিভিন্ন কলামে ডেটা দ্রুত খুঁজে বের করতে পারেন, তবে Index অনুসন্ধান করতে কিছুটা অতিরিক্ত সময় লাগে, কারণ এটি মূল টেবিলের ডেটা থেকে আলাদা থাকে।
উদাহরণ:
CREATE NONCLUSTERED INDEX idx_customer_name
ON Customers (CustomerName);
এখানে, CustomerName কলামে Non-Clustered Index তৈরি করা হয়েছে, কিন্তু এর ফলে টেবিলের ডেটার শারীরিক অর্ডার পরিবর্তন হবে না। শুধু একটি আলাদা সূচী তৈরি হবে যাতে CustomerName অনুসারে ডেটা খুঁজে পাওয়া যাবে।
5. Clustered এবং Non-Clustered Index এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Clustered Index | Non-Clustered Index |
|---|---|---|
| ডেটা সাজানো | ফিজিক্যাল ডেটা সাজানো হয় | ডেটার সাজানো পরিবর্তন হয় না |
| Index Key | একমাত্র একটিই থাকতে পারে | একাধিক Index তৈরি করা যেতে পারে |
| ডেটার অবস্থান | Index key এর ওপর ভিত্তি করে ডেটা পুনঃসংগঠিত হয় | আলাদা একটি সূচী তৈরি হয়, যা মূল ডেটাবেস থেকে আলাদা থাকে |
| পারফরমেন্স | দ্রুত সার্চ এবং ফিল্টারিং, কিন্তু আপডেট ও ইনসার্ট ধীর হতে পারে | দ্রুত অনুসন্ধান, কিন্তু কিছু অতিরিক্ত সময় নেয় |
| প্রধান কীবোর্ড | সাধারণত Primary Key অথবা Unique Key | কোনো কলাম (যে কোনো একটি) হতে পারে |
| ডেটাবেসে অবস্থান | টেবিলের ডেটার সাথে একই স্তরে (ফিজিক্যালি) | আলাদা ডেটাবেস স্ট্রাকচার (একটি আলাদা সূচী) |
6. Index তৈরি করার পর তার প্রভাব
Index তৈরি করার পরে আপনার ডেটাবেসের অনুসন্ধান ক্ষমতা উন্নত হতে পারে, তবে এটি কিছু পারফরমেন্স প্রভাব ফেলতে পারে:
- INSERT, UPDATE, DELETE অপারেশন: Index থাকার কারণে ডেটাবেসে ডেটা যোগ, মুছে ফেলা বা আপডেট করার সময় কিছুটা পারফরমেন্স ক্ষতি হতে পারে, কারণ Index আপডেট করতে হয়।
- Storage: Index তৈরি করার ফলে ডেটাবেসে অতিরিক্ত স্টোরেজ প্রয়োজন হতে পারে, বিশেষ করে যদি অনেক Index তৈরি করা হয়।
সারাংশ
Index SQL ডেটাবেসের একটি গুরুত্বপূর্ণ অংশ, যা ডেটাকে দ্রুত অনুসন্ধান করতে সাহায্য করে। Clustered Index ডেটাবেসের মূল টেবিলের ডেটাকে সাজিয়ে দেয় এবং একে কেবল একবারই তৈরি করা যায়, তবে Non-Clustered Index একটি আলাদা ডেটাবেস স্ট্রাকচার তৈরি করে এবং একাধিক Non-Clustered Index তৈরি করা সম্ভব। Index তৈরি করার ফলে ডেটা অনুসন্ধান দ্রুত হয়, তবে INSERT, UPDATE, এবং DELETE অপারেশনের সময় পারফরমেন্সে কিছু প্রভাব ফেলতে পারে।
Read more