Mengenal Indexing di MongoDB
Index merupakan salah satu fitur yang selalu ada pada Database Management System, tak berbeda dengan MongoDB. Indexing dibutuhkan untuk menambah efisiensi query pada MongoDB. Jika melakukan eksekusi query pada field
yang tidak ter-index, maka MongoDB akan melakukan scanning
semua dokumen. Sedangkan kalau melakukan query pada field yang ter-index untuk mengurangi dokumen yang perlu di scan. Selain digunakan untuk pencarian, index pada MongoDB juga akan digunakan pada operasi pengurutan (sort).
Meskipun penggunaan index terlihat sangat menguntungkan, tapi hal ini juga memiliki beberapa keterbatasan dan mungkin bisa berdampak negatif pada performa pencarian. Keterbatasan itu nanti akan dibahas di salah satu bagian pada artikel ini.
Jenis Index pada MongoDB
Secara default
MongoDB sudah membuat index secara otomatis pada field
_id
. Field _id
juga bisa dijadikan pembeda untuk setiap dokumen. Selain index pada field _id
, kita juga menambahkan index sesuai yang dibutuhkan. Ada beberapa jenis index di MongoDB, jenis index yang sering dipakai adalah Single Index, Compound Index, Multikey Index.
Single Index
Single index adalah index yang akan menggunakan informasi pada satu field sebagai index. Contoh dari tipe single index adalah index pada field _id
. Ketika ingin membuat index jenis ini, kita perlu mengetahui field mana yang mau di-index dan menyiapkan pengurutan yang mau digunakan. Gunakan angka 1 untuk pengurutan ascending (kecil ke besar) dan -1 untuk penngurutan descending (besar ke kecil).
Contoh sintaks untuk membuat indeks pada collection mahasiswa:
db.mahasiswa.createIndex( { nim: 1 } )
Compound Index
Jika kita sering melakukan query atau pencarian menggunakan beberapa field secara bersamaan, maka Compound Index adalah tipe index yang kita perlukan.
Berikut adalah contoh situasi kita membutuhkan compound index. Kita mendesain aplikasi jual beli yang memberikan fitur pencarian berdasarkan nama produk dan jenis produk. Pada kasus ini kita lebih baik untuk meng-index field nama produk dan jenis produk pada satu index yang sama.
Contoh sintaks untuk membuat index pada collection daftar barang
db.daftar_barang.createIndex({namaProduk: 1, jenisProduk: 1})
Multikey Index
Multikey Index sebenarnya bisa berupa Single maupun Compound index. Suatu index disebut Multikey index jika key yang dijadikan index berada didalam array. Berikut adalah contoh penggunaan multikey index adalah pada data transaksi penjualan. Sebagai contoh data transaksi penjualan adalah sebagai berikut
{
"id": "xykae",
"trxId": "20240101-xykae",
"daftarBarang": [
{
"idBarang": "001",
"jumlah": 2
}
]
}
Jika kita ingin melakukan query untuk mendapatkan transaksi mana saja yang membeli barang dengan id “x”, maka kita perlu membuat index untuk field daftarBarang.idBarang
. Index untuk field daftarBarang.idBarang
disebut sebagai multikey index, karena dalam daftarBarang
terdapat array of object yang mengandung field idBarang
Dampak dan Keterbatasan Indexing pada MongoDB
Setiap index membutuhkan porsi penyimpanan dan memori
Semakin banyak index yang dimasukkan maka akan membebani penyimpanan atau memory MongoDB server. Maka dari itu dibutuhkan perencanaan dan efisiensi penggunaan suatu index.
Pembuatan index akan dilakukan setiap operasi insert
Setiap kali ada operasi insert, maka MongoDB server akan membuat index yang bersesuaian dengan data yang dimasukkan. Proses pembuatan index ini sedikit banyak akan berpengaruh pada performa query. Maka dari itu suatu collection yang bertipe high read & low write akan mendapatkan benefit lebih tinggi dari pada yang bertipe high write & low read. Meskipun begitu query field
yang ter-index meringankan proses MongoDB server daripada yang tidak ter-index.
Dampak menambahkan index pada collection yang sudah berisi
Seperti yang sudah dijelaskan pada poin sebelumnya, proses pembuatan index ini sedikit banyak akan berpengaruh pada performa query, terlebih pada pembuatan index baru pada collection yang udah berisi banyak data. Oleh karena itu, perencanaan dan pemilihan metode penambahan index yang matang sangat diperlukan untuk meminimalisir dampak terhadap performa selama proses penambahan index.