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.