একটা index ছাড়া, MongoDB একটা query-র উত্তর দিতে collection-এর প্রতিটা একক document চেক করে — একটা collection scan। একটা ছোট collection-এ এটা তাৎক্ষণিক; একটা বড়টাতে এটা দ্রুত ধীর হয়ে যায়। একটা index হলো একটা আলাদা, sorted data structure যা MongoDB-কে এর বদলে সরাসরি matching document-এ যেতে দেয়।
db.users.createIndex({ email: 1 })1 মানে ascending order, -1 descending — equality lookup-এর জন্য ব্যবহৃত একটা single-field index-এর জন্য, দিক খুব কমই গুরুত্বপূর্ণ।
একটা compound index একাধিক field cover করে, আর সেই combination-এ filter (বা sort) করা query দ্রুত করে:
db.users.createIndex({ role: 1, age: -1 })একটা compound index-এ field order গুরুত্বপূর্ণ — এই index দক্ষতার সাথে শুধু role দিয়ে, বা role আর age একসাথে filter করা query serve করে, কিন্তু শুধু age দিয়ে filter করা একটা query না।
বলবৎ করতে { unique: true } যোগ করুন যে সেই field-এর জন্য কোনো দুটো document একই value share করতে পারবে না — সাধারণত email-এর মতো field-এ ব্যবহৃত:
db.users.createIndex({ email: 1 }, { unique: true }).explain() ঠিক দেখায় MongoDB কীভাবে একটা query execute করেছে — "stage": "COLLSCAN" (collection scan, বড় data-তে ধীর) বনাম "stage": "IXSCAN" (index scan, দ্রুত) খুঁজুন:
db.users.find({ email: "ananya@example.com" }).explain()Index একটা trade-off, একটা free upgrade না
Index read দ্রুত করে কিন্তু write সামান্য ধীর করে, কারণ যখনই একটা document পরিবর্তন হয় MongoDB-কে প্রতিটা index update করতে হয়। যে field আপনি আসলে query আর প্রায়ই sort করেন সেগুলো index করুন — প্রতিটা field না।