SQL Server-এ Covering Index এবং Filtered Index দুটি বিশেষ ধরনের ইনডেক্স যা ডেটাবেসের পারফরম্যান্স উন্নত করতে ব্যবহৃত হয়। এই ইনডেক্সগুলো কীভাবে কাজ করে এবং কিভাবে এগুলি ব্যবহৃত হয় তা বুঝতে হলে প্রথমে সাধারণ ইনডেক্সের ধারণা জানতে হবে।
1. Covering Index
Covering Index এমন একটি ইনডেক্স যা একটি নির্দিষ্ট কুয়েরি বা SQL স্টেটমেন্টের জন্য প্রয়োজনীয় সকল কলামকে অন্তর্ভুক্ত করে। এর মাধ্যমে SQL Server কুয়েরি প্রসেসিংয়ে আসলে টেবিলের ডেটা অ্যাক্সেস করার প্রয়োজন না করে, সরাসরি ইনডেক্স থেকেই ফলাফল পেতে পারে। অর্থাৎ, কুয়েরি ইস্যু করা হলে ডেটাবেস ইনডেক্স থেকেই সমস্ত তথ্য বের করে ফেলতে পারে, এটি Index Covering নামে পরিচিত।
1.1. Covering Index এর সুবিধা
- পারফরম্যান্স উন্নতি: একটি কুয়েরির জন্য সকল প্রয়োজনীয় কলাম ইনডেক্সে অন্তর্ভুক্ত থাকলে, SQL Server ইনডেক্স থেকেই ডেটা উদ্ধার করতে পারে, ফলে ডিস্কের উপর অতিরিক্ত I/O অপারেশন কমে যায়।
- কম I/O অপারেশন: কুয়েরির জন্য ডেটা টেবিল থেকে না এনে ইনডেক্স থেকেই পাওয়া যায়, যা পারফরম্যান্সে বড় ধরনের উন্নতি আনতে পারে।
- কুয়েরি প্রসেসিং দ্রুততর: কুয়েরি রেজাল্ট পাওয়ার জন্য SQL Server কে কেবলমাত্র ইনডেক্স ব্যবহার করতে হয়, ফলে দ্রুততম রেসপন্স টাইম পাওয়া যায়।
1.2. Covering Index এর উদাহরণ
ধরা যাক, আমাদের একটি Employees টেবিল রয়েছে এবং সেখানে একটি কুয়েরি চালানো হচ্ছে যা Name, Department, এবং Salary কলামগুলোর উপর ভিত্তি করে।
CREATE NONCLUSTERED INDEX IDX_EmployeeName_Department_Salary
ON Employees (Name, Department)
INCLUDE (Salary);
এখানে:
- ON Employees (Name, Department): এই দুইটি কলামকে ইনডেক্সের প্রাথমিক অংশ হিসেবে সংরক্ষিত হচ্ছে।
- INCLUDE (Salary):
Salaryকলামটিকে ইনডেক্সে অন্তর্ভুক্ত করা হচ্ছে, যাতে কুয়েরি চলানোর সময় টেবিল থেকে ডেটা এনে দেখানোর প্রয়োজন না হয় এবং এটি শুধুমাত্র ইনডেক্স থেকেই সম্পন্ন হয়।
এভাবে, SQL Server কেবলমাত্র ইনডেক্স ব্যবহার করে Name, Department, এবং Salary ডেটা একত্র করতে সক্ষম হবে এবং পারফরম্যান্স আরও দ্রুততর হবে।
2. Filtered Index
Filtered Index হল একটি ইনডেক্স যা একটি নির্দিষ্ট filter condition এর উপর ভিত্তি করে শুধুমাত্র কিছু নির্দিষ্ট ডেটা ইনডেক্সে সংরক্ষণ করে। Filtered Index সাধারণত তখন ব্যবহার করা হয় যখন টেবিলের মধ্যে অনেকগুলো রেকর্ড থাকে কিন্তু কুয়েরির প্রয়োজনীয় ডেটার পরিসর সীমিত থাকে। এটি ডেটাবেসের পারফরম্যান্স এবং জায়গার ব্যবহারকে আরও দক্ষ করে তোলে, কারণ শুধুমাত্র প্রয়োজনীয় ডেটার জন্য ইনডেক্স তৈরি করা হয়।
2.1. Filtered Index এর সুবিধা
- স্টোরেজ সাশ্রয়: শুধুমাত্র নির্দিষ্ট ফিল্টার শর্তপূরণকারী রেকর্ডগুলো ইনডেক্সে রাখা হয়, ফলে ডিস্ক স্পেস সাশ্রয় হয়।
- পারফরম্যান্স উন্নতি: সীমিত পরিসরের ডেটা দ্রুত পেতে সাহায্য করে, কারণ SQL Server কেবলমাত্র ফিল্টারড ডেটার জন্য ইনডেক্স তৈরি করেছে।
- ডেটাবেস অপটিমাইজেশন: যেখানে বড় আকারের টেবিল থাকে, সেখানে Filtered Index আরও দ্রুত ডেটা অ্যাক্সেস করতে সহায়তা করে, বিশেষ করে যখন কুয়েরি নির্দিষ্ট কিছু রেকর্ডের জন্য তৈরি করা হয়।
2.2. Filtered Index এর উদাহরণ
ধরা যাক, আমাদের Orders টেবিল রয়েছে এবং আমরা শুধুমাত্র "Pending" অর্ডারগুলোর জন্য একটি ইনডেক্স তৈরি করতে চাই, কারণ আমাদের বেশিরভাগ কুয়েরি "Pending" অর্ডারগুলোর উপর ভিত্তি করে।
CREATE NONCLUSTERED INDEX IDX_PendingOrders
ON Orders (OrderDate)
WHERE OrderStatus = 'Pending';
এখানে:
- WHERE OrderStatus = 'Pending': এটি একটি filter condition যা ইনডেক্সে শুধু "Pending" স্ট্যাটাসযুক্ত অর্ডারগুলো অন্তর্ভুক্ত করবে।
- ON Orders (OrderDate): আমরা
OrderDateকলামটি ইনডেক্সে রাখতে চাই, যেটি কুয়েরি চালানোর জন্য গুরুত্বপূর্ণ।
এই ইনডেক্সটি কেবলমাত্র সেই অর্ডারগুলোর জন্য প্রযোজ্য হবে যাদের স্ট্যাটাস Pending। ফলে, ডিস্ক স্পেস এবং পারফরম্যান্সের সুবিধা পাওয়া যাবে, কারণ অপ্রয়োজনীয় রেকর্ডগুলো ইনডেক্সে রাখা হবে না।
3. Covering Index এবং Filtered Index এর তুলনা
| ফিচার | Covering Index | Filtered Index |
|---|---|---|
| পদ্ধতি | সকল প্রয়োজনীয় কলাম অন্তর্ভুক্ত করে। | একটি নির্দিষ্ট filter condition এর উপর ভিত্তি করে ডেটা ইনডেক্স করা হয়। |
| পারফরম্যান্স | কুয়েরি প্রসেসিং দ্রুততর হয়, কারণ ইনডেক্স থেকেই সকল ডেটা পাওয়া যায়। | নির্দিষ্ট ডেটার জন্য দ্রুত পারফরম্যান্স প্রদান করে। |
| স্টোরেজ | অধিক স্টোরেজ প্রয়োজন, কারণ সকল কলামের জন্য ইনডেক্স তৈরি হয়। | স্টোরেজ সাশ্রয়, কারণ শুধু ফিল্টার করা ডেটা ইনডেক্সে থাকে। |
| ব্যবহার | সমস্ত কলামের জন্য এক্সিকিউট হওয়া কুয়েরি। | নির্দিষ্ট কুয়েরির জন্য, বিশেষ করে যখন ডেটা ফিল্টার করা থাকে। |
| ইউজ কেস | বড় টেবিলের জন্য যেখানে অনেক কুয়েরি একই কলামগুলির উপর নির্ভরশীল। | বিশেষ ধরনের কুয়েরি যেমন নির্দিষ্ট শর্তে থাকা ডেটা। |
4. কখন ব্যবহার করবেন?
- Covering Index: যখন আপনি একটি কুয়েরির জন্য বারবার একই কলাম বা ডেটা ফিল্ড ব্যবহার করেন, এবং আপনার লক্ষ্য হচ্ছে I/O অপারেশন কমিয়ে দ্রুত ফলাফল পাওয়া।
- Filtered Index: যখন টেবিলের মধ্যে অনেকগুলি অপ্রয়োজনীয় ডেটা থাকে এবং কুয়েরি সাধারণত একটি ছোট subset এর উপর কাজ করে।
এসব ইনডেক্স ব্যবহারে SQL Server আপনার ডেটাবেসের পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত করতে পারে, তবে সঠিকভাবে ইনডেক্স ব্যবহারের জন্য আপনার ডেটার ধরন এবং কুয়েরির ব্যবহার লক্ষ্য করা অত্যন্ত জরুরি।
Read more