Database index: B-tree কীভাবে query দ্রুত করে
Index-ই query-কে মিনিটের বদলে মিলিসেকেন্ডে আনে। B-tree index কীভাবে কাজ করে এবং কখন সাহায্য বা ক্ষতি করে, জানুন।

Index ছাড়া row খুঁজতে পুরো table পড়তে হয় (full scan)। Index থাকলে database প্রায় সরাসরি row-তে লাফ দেয়।
বইয়ের উপমা
বইয়ের সূচিপত্র বিষয়গুলো বর্ণানুক্রমে পৃষ্ঠা নম্বরসহ রাখে। "caching" খুঁজতে আপনি পুরো বই পড়েন না। Database index হলো এক বা একাধিক column-এর সাজানো কপি, যাতে পুরো row-র দিকে নির্দেশ থাকে।
B-tree
বেশিরভাগ index B-tree, একটি ভারসাম্যপূর্ণ গাছ। Lookup root থেকে শুরু করে কয়েকটি শাখা ধরে leaf-এ পৌঁছায়, তাই ১০ লাখ row খুঁজতে মাত্র কয়েক ধাপ (প্রায় log n) লাগে, ১০ লাখ পড়তে হয় না। B-tree key সাজানো রাখে, তাই এগুলোতে দারুণ:
- সমতা:
WHERE email = 'a@x.com' - পরিসর:
WHERE created_at > '2026-10-01' - সাজানো:
ORDER BY created_at
বানানো
CREATE INDEX idx_articles_author ON articles (author_id);
CREATE UNIQUE INDEX idx_users_email ON users (email);
Primary key ও unique constraint স্বয়ংক্রিয়ভাবে index বানায়। Foreign key column সবসময় index হয় না, তাই নিজে দিন।
Composite index ও leftmost-prefix নিয়ম
(author_id, created_at)-এর index আগে author, তারপর তারিখ ধরে সাজানো। এটি সামলাতে পারে:
WHERE author_id = 5WHERE author_id = 5 AND created_at > ...WHERE author_id = 5 ORDER BY created_at
শুধু WHERE created_at > ...-এ সাধারণত সাহায্য করে না, কারণ এটি সবচেয়ে বামের column নয়। আপনি যেভাবে filter করেন সেই ক্রমে column সাজান: আগে সমতার column, তারপর পরিসর বা sort-এর column।
Covering index
Query-র দরকারি সব column index-এ থাকলে database table না ছুঁয়ে শুধু index থেকে উত্তর দেয়। গরম query-তে দ্রুত।
খরচ
- প্রতিটি
INSERT,UPDATEওDELETE-কে প্রতিটি index-ও আপডেট করতে হয়, তাই বেশি index write ধীর করে। - Index disk ও memory নেয়।
- তাই যা query করেন তা index করুন, প্রতিটি column নয়।
আপনার index কেন ব্যবহার নাও হতে পারে
- Column-এ function:
WHERE LOWER(email) = ...email-এর সাধারণ index ব্যবহার করতে পারে না। Expression index দিন বা normalised data রাখুন। - শুরুতে wildcard:
LIKE '%word'B-tree ব্যবহার করতে পারে না।LIKE 'word%'পারে। - কম selectivity: অল্প আলাদা মানের column-এ (যেমন boolean) index প্রায়ই সাহায্য করে না, কারণ অনেক row মিললে planner scan পছন্দ করে।
- ধরনের অমিল (সংখ্যা column-কে string-এর সাথে তুলনা)।
- পুরোনো statistics।
ANALYZEচালান।
কীভাবে যাচাই করবেন
EXPLAIN (বা EXPLAIN ANALYZE) ব্যবহার করে index scan বনাম sequential/full scan খুঁজুন। আন্দাজ নয়, মাপুন।
মূল কথা: যে column দিয়ে filter, join ও sort করেন সেগুলো index করুন, composite column সাবধানে সাজান, এবং EXPLAIN দিয়ে যাচাই করুন।
Backend ও Database সিরিজ, পর্ব ১ (SQL ও transaction): 2 নম্বর (মোট 4)। আগের লেখা: SQL JOIN সহজ উদাহরণসহ.


