Indeks dalam MongoDB mempercepatkan pertanyaan dengan membenarkan pangkalan data mencari dokumen tanpa mengimbas keseluruhan koleksi — sama seperti dalam pangkalan data hubungan. Tanpa indeks, pertanyaan melakukan imbasan koleksi (menyemak setiap dokumen); dengannya, carian adalah pantas. MongoDB menyokong beberapa jenis indeks.
Mencipta dan menggunakan indeks
// without an index, this scans EVERY document (slow on a big collection)
db.users.find({ email: "[email protected]" });
// create an index → fast lookups
db.users.createIndex({ email: 1 }); // 1 = ascending (B-tree index)
db.users.find({ email: "[email protected]" }); // now uses the index
db.users.getIndexes(); // list indexes
Medan _id lalai sentiasa diindeks. Anda menambah indeks pada medan yang anda pertanyakan, isih, atau tapis dengan kerap.
Indeks kompaun (berbilang medan)
// a compound index on multiple fields — order matters!
db.users.createIndex({ country: 1, age: -1 });
// helps: { country: ? }, { country: ?, age: ? } (leftmost prefix)
// does NOT help: { age: ? } alone
Indeks kompaun meliputi pertanyaan pada berbilang medan, tetapi urutan medan adalah penting (indeks menyokong pertanyaan yang menggunakan awalan paling kiri bagi medannya — peraturan utama untuk difahami).
Jenis indeks
Single field → { field: 1 }
Compound → { a: 1, b: -1 } (multiple fields)
Multi-key → automatically created when indexing an ARRAY field (indexes each element)
Text → text search on string content
Geospatial → 2dsphere for location queries
Hashed → for hashed sharding
TTL → { createdAt: 1 } with expireAfterSeconds → auto-delete old docs
Unique → { email: 1 }, { unique: true } → enforce uniqueness
Partial/Sparse → index only some documents
Imbangan (sama seperti SQL)
✓ Indexes speed up reads dramatically (collection scan → index lookup)
✗ But they consume storage and SLOW DOWN writes (each write updates indexes)
→ Index what you query frequently; don't over-index (hurts writes). Use explain()
to verify queries use indexes (look for COLLSCAN = bad, IXSCAN = good).
Mengapa ia penting
Indeks ialah salah satu topik yang paling penting untuk prestasi MongoDB — ia ialah alat utama untuk menjadikan pertanyaan pantas, dan prinsipnya serupa dengan pangkalan data hubungan, jadi memahaminya ialah pengetahuan penting untuk aplikasi MongoDB yang berprestasi.
Tanpa indeks, pertanyaan memerlukan imbasan koleksi (menyemak setiap dokumen — sangat perlahan apabila koleksi berkembang), manakala indeks membolehkan carian pantas — selalunya perbezaan antara pertanyaan yang mengambil milisaat berbanding saat.
Memahami cara mencipta indeks pada medan yang kerap dipertanyakan/diisih/ditapis adalah asas. Indeks kompaun (meliputi pertanyaan berbilang medan) adalah penting, terutamanya peraturan bahawa urutan medan adalah penting (indeks menyokong pertanyaan yang menggunakan awalan paling kiri bagi medannya — konsep utama untuk mereka bentuk indeks kompaun yang berkesan).
Mengetahui jenis indeks yang relevan dengan MongoDB adalah berharga: indeks multi-kunci (mengindeks elemen tatasusunan secara automatik — penting memandangkan dokumen MongoDB yang kaya dengan tatasusunan), indeks TTL (luput automatik bagi dokumen lama — berguna untuk sesi, log, data sementara), indeks unik (menguatkuasakan keunikan), indeks teks dan geospatial untuk pertanyaan khusus, serta indeks partial/sparse.
Memahami imbangan (indeks mempercepatkan bacaan tetapi menggunakan storan dan memperlahankan tulisan, jadi indekskan apa yang anda pertanyakan tanpa terlebih indeks) dan menggunakan explain() untuk mengesahkan pertanyaan menggunakan indeks (COLLSCAN = imbasan buruk, IXSCAN = penggunaan indeks yang baik) ialah kemahiran praktikal utama untuk pengoptimuman.
Memandangkan prestasi pertanyaan adalah kritikal dan pengindeksan yang betul ialah pengoptimuman MongoDB yang paling berkesan, memahami indeks — bagaimana ia berfungsi, pengurutan indeks kompaun, jenis khusus MongoDB (multi-kunci, TTL, unik), imbangan baca/tulis, dan pengesahan dengan explain() — ialah pengetahuan penting dan bernilai tinggi untuk aplikasi MongoDB yang berprestasi serta salah satu topik MongoDB yang paling penting, selari dengan kepentingan pengindeksan dalam pangkalan data SQL.
