Indexing কী এবং কেন প্রয়োজন?
একটি বিশাল লাইব্রেরিতে লাখ লাখ বইয়ের মধ্যে নির্দিষ্ট বই খুঁজতে আপনি প্রতিটি শেলফ দেখেন না, সূচিপত্র (Index) দেখে সরাসরি বইয়ের অবস্থানে যান। Database Indexing ঠিক একইভাবে কাজ করে। সাধারণত B-Tree অ্যালগরিদম ব্যবহার হয়।
Index হলো একটি Data Structure, যা নির্দিষ্ট কলামের ওপর তৈরি হয়, যাতে Search, Retrieval, Sorting ও Filtering দ্রুত হয়। সিস্টেম ডিজাইনে Query দ্রুত চালানোর জন্য এটি ব্যবহার করা হয়।
Indexing কীভাবে কাজ করে?
ধরুন টেবিলে ১ কোটি রেকর্ড আছে এবং আপনি এই Query চালালেন:
SELECT * FROM students WHERE student_id = 12345;Index ছাড়া: Database পুরো টেবিল স্ক্যান করে (Full Table Scan), যা অনেক ধীর।
Index সহ:
student_idকলামের Index Structure ধরে সরাসরি রেকর্ডে পৌঁছানো যায়।
Index এর ধরন
Primary Index: Primary Key-তে সাধারণত স্বয়ংক্রিয়ভাবে Index তৈরি হয় এবং এটি Unique হয়।
Clustered Index: ডাটা Table-এ Index-এর ক্রম অনুযায়ী সাজানো থাকে। প্রতিটি Table-এ সর্বোচ্চ একটি থাকতে পারে।
Non-clustered Index: আলাদা একটি Structure, যা মূল Table-এর সাথে Pointer দিয়ে যুক্ত থাকে। একাধিক থাকতে পারে।
Composite Index: একাধিক কলামের ওপর একটি Index।
Full-Text Index: Google-এর মতো টেক্সট সার্চের জন্য।
CREATE INDEX idx_name ON students (first_name, last_name);Index এর সুবিধা
Query Performance বাড়ে: দ্রুত রেকর্ড পাওয়া যায়।
Sorting দ্রুত হয়: ডাটা সাজানো অবস্থায় বের করা সহজ হয়।
Join দ্রুত হয়: বড় টেবিল Join করলেও Performance ভালো থাকে।
Index এর অসুবিধা
Storage প্রয়োজন হয়: প্রতিটি Index-এর জন্য অতিরিক্ত Storage প্রয়োজন।
INSERT ধীর হতে পারে: নতুন Record Insert হলে সংশ্লিষ্ট Index-গুলোও Update করতে হয়।
UPDATE-এর Cost বাড়তে পারে: Index করা Column পরিবর্তন হলে Index-ও Update করতে হতে পারে।
DELETE এর Cost বাড়তে পারে: Record Delete করার সময় সংশ্লিষ্ট Index Entry-ও Remove করতে হয়।
সতর্কতা
Index বেশি হলে Database ধীর হয়: প্রতিটি
INSERT,UPDATE,DELETEএ Index ও আপডেট হয়, যা বাড়তি সময় নেয়।সব কলামে Index দেওয়া ঠিক নয়: এতে Performance ও Storage দুটোরই ক্ষতি হয়।
Index কীভাবে ব্যবহার করা উচিত?
যে কলাম Query-তে বেশি ব্যবহৃত হয়, সেখানে Index দিন।
Primary Key-তে আলাদা Index বানানোর দরকার নেই।
Low-cardinality কলামে (যেমন Male/Female) সাধারণ Index না দেওয়াই ভালো।
Query Execution Plan (
EXPLAIN) দিয়ে Performance যাচাই করুন।
Indexing সিস্টেম ডিজাইনের একটি গুরুত্বপূর্ণ অংশ। সঠিকভাবে ব্যবহার করলে Query অনেক দ্রুত হয় এবং পুরো সিস্টেমের কার্যকারিতা বাড়ে। ভুলভাবে ব্যবহার করলে উল্টো Performance কমে যায়, তাই বুঝেশুনে Indexing Strategy ঠিক করা উচিত।