Indeks memberi pengguna cara yang efisien untuk meminta data. Saat kueri data tanpa indeks, kueri harus mencari semua catatan dalam database untuk menemukan data yang cocok dengan kueri
Di MongoDB, kueri tanpa indeks disebut pemindaian koleksi. Pemindaian koleksi akan
- Menghasilkan berbagai kemacetan kinerja
- Secara signifikan memperlambat aplikasi Anda
Untungnya, menggunakan indeks memperbaiki kedua masalah ini. Dengan membatasi jumlah dokumen yang akan ditanyakan, Anda akan meningkatkan keseluruhan kinerja aplikasi
Dalam tutorial ini, saya akan memandu Anda melalui berbagai jenis indeks dan menunjukkan cara membuat dan mengelola indeks di MongoDB
[Artikel ini adalah bagian dari Panduan MongoDB kami. Gunakan menu sebelah kanan untuk menavigasi. ]
Apa itu indeks di MongoDB?
Indeks adalah struktur data khusus yang menyimpan sebagian kecil data Koleksi dengan cara yang dapat ditanyakan dengan mudah
Dalam istilah paling sederhana, indeks menyimpan nilai bidang yang diindeks di luar tabel atau kumpulan dan melacak lokasinya di disk. Nilai-nilai ini digunakan untuk mengurutkan bidang yang diindeks. Pengurutan ini membantu melakukan pencocokan kesetaraan dan operasi kueri berbasis rentang secara efisien. Di MongoDB, indeks ditentukan di tingkat koleksi dan indeks pada bidang atau subbidang apa pun dari dokumen dalam koleksi didukung
Untuk tutorial ini, kami akan menggunakan kumpulan data berikut untuk mendemonstrasikan fungsionalitas pengindeksan MongoDB
use students db.createCollection["studentgrades"] db.studentgrades.insertMany[ [ {name: "Barry", subject: "Maths", score: 92}, {name: "Kent", subject: "Physics", score: 87}, {name: "Harry", subject: "Maths", score: 99, notes: "Exceptional Performance"}, {name: "Alex", subject: "Literature", score: 78}, {name: "Tom", subject: "History", score: 65, notes: "Adequate"} ] ] db.studentgrades.find[{},{_id:0}]
Hasil
Membuat indeks
Saat membuat dokumen dalam koleksi, MongoDB membuat indeks unik menggunakan bidang _id. MongoDB menyebut ini sebagai Indeks _id Default. Indeks default ini tidak dapat dihapus dari koleksi
Saat menanyakan kumpulan data pengujian, Anda dapat melihat kolom _id yang akan digunakan sebagai indeks default
db.studentgrades.find[].pretty[]_
Hasil
Sekarang mari kita buat index. Untuk melakukannya, Anda dapat menggunakan metode createIndex menggunakan sintaks berikut
db..createIndex[, ]
Saat membuat indeks, Anda perlu menentukan bidang yang akan diindeks dan arah tombol [1 atau -1] untuk menunjukkan urutan naik atau turun
Hal lain yang perlu diingat adalah nama indeks. Secara default, MongoDB akan menghasilkan nama indeks dengan menggabungkan kunci yang diindeks dengan arah setiap kunci dalam indeks menggunakan garis bawah sebagai pemisah. Misalnya. {nama. 1} akan dibuat sebagai name_1
Opsi terbaik adalah menggunakan opsi nama untuk menentukan nama indeks khusus saat membuat indeks. Indeks tidak dapat diganti namanya setelah dibuat. [Satu-satunya cara untuk mengganti nama indeks adalah dengan membuang indeks itu terlebih dahulu, , dan membuatnya kembali menggunakan nama yang diinginkan. ]
Mari buat indeks menggunakan bidang nama di koleksi nilai siswa dan beri nama sebagai indeks nama siswa
db.studentgrades.createIndex[ {name: 1}, {name: "student name index"} ]
Hasil
Menemukan indeks
Anda dapat menemukan semua indeks yang tersedia dalam koleksi MongoDB dengan menggunakan metode getIndexes. Ini akan mengembalikan semua indeks dalam koleksi tertentu
db..getIndexes[]_
Mari kita lihat semua indeks di koleksi studentgrades menggunakan perintah berikut
db.studentgrades.getIndexes[]
Hasil
Output berisi indeks _id default dan indeks nama siswa yang dibuat pengguna
Menjatuhkan indeks
Untuk menghapus indeks dari koleksi, gunakan metode dropIndex sambil menentukan nama indeks yang akan dihapus
db..dropIndex[]_
Mari kita hapus indeks yang dibuat pengguna dengan indeks nama siswa, seperti yang ditunjukkan di bawah ini
db.studentgrades.dropIndex["student name index"]
Hasil
Anda juga dapat menggunakan nilai bidang indeks untuk menghapus indeks tanpa nama yang ditentukan
db.studentgrades.dropIndex[{name:1}]_
Hasil
Perintah dropIndexes juga dapat menghapus semua indeks kecuali indeks _id default
db.studentgrades.dropIndexes[]_
Hasil
Jenis indeks MongoDB umum
MongoDB menyediakan berbagai jenis indeks yang dapat dimanfaatkan sesuai dengan kebutuhan pengguna. Inilah yang paling umum
- Indeks bidang tunggal
- Indeks senyawa
- Indeks multikunci
Indeks bidang tunggal
Indeks yang ditentukan pengguna ini menggunakan satu bidang dalam dokumen untuk membuat indeks dalam urutan naik atau turun [1 atau -1]. Dalam indeks bidang tunggal, urutan kunci indeks tidak berdampak karena MongoDB dapat melintasi indeks di kedua arah
db.studentgrades.find[].pretty[]_0
Hasil
Indeks di atas akan mengurutkan data dalam urutan menaik menggunakan bidang nama. Anda dapat menggunakan metode sort[] untuk melihat bagaimana data akan direpresentasikan dalam indeks
db.studentgrades.find[].pretty[]_1
Hasil
Indeks senyawa
Anda dapat menggunakan banyak bidang dalam dokumen MongoDB untuk membuat indeks majemuk. Jenis indeks ini akan menggunakan kolom pertama untuk pengurutan awal, lalu mengurutkan berdasarkan kolom sebelumnya
db.studentgrades.find[].pretty[]_2
Dalam indeks majemuk di atas, MongoDB akan
- Urutkan pertama berdasarkan bidang subjek
- Kemudian, dalam setiap nilai mata pelajaran, urutkan berdasarkan nilai
Indeks akan membuat struktur data yang mirip dengan berikut ini
db.studentgrades.find[].pretty[]_3
Hasil
Indeks multikunci
MongoDB mendukung bidang array pengindeksan. Saat Anda membuat indeks untuk bidang yang berisi larik, MongoDB akan membuat entri indeks terpisah untuk setiap elemen dalam larik. Indeks multikunci ini memungkinkan pengguna untuk mengkueri dokumen menggunakan elemen di dalam larik
MongoDB akan secara otomatis membuat indeks multikey saat bertemu dengan bidang array tanpa mengharuskan pengguna untuk secara eksplisit menentukan tipe multikey
Mari buat kumpulan data baru yang berisi bidang larik untuk mendemonstrasikan pembuatan indeks multikunci
db.studentgrades.find[].pretty[]_4
Hasil
Sekarang mari buat indeks menggunakan bidang nilai
db.studentgrades.find[].pretty[]_5
Hasil
Kode di atas akan secara otomatis membuat indeks Multikey di MongoDB. Saat Anda meminta dokumen menggunakan bidang larik [nilai], MongoDB akan mencari elemen pertama dari larik yang ditentukan dalam metode find[] dan kemudian mencari seluruh kueri yang cocok
Misalnya, mari pertimbangkan kueri pencarian berikut
db.studentgrades.find[].pretty[]_6
Awalnya, MongoDB akan menggunakan indeks multikey untuk mencari dokumen di mana array nilai berisi elemen pertama [80] di posisi mana pun. Kemudian, dalam dokumen yang dipilih tersebut, dokumen dengan semua elemen yang cocok akan dipilih
Jenis indeks MongoDB lainnya
Selain tipe Indeks populer yang disebutkan di atas, MongoDB juga menawarkan beberapa tipe indeks khusus untuk kasus penggunaan yang ditargetkan
- Indeks geospasial
- Indeks uji
- Indeks hash
Indeks Geospasial
MongoDB menyediakan dua jenis indeks untuk meningkatkan efisiensi kueri basis data saat menangani data koordinat geospasial
- Indeks 2d yang menggunakan geometri planar yang ditujukan untuk pasangan koordinat lama yang digunakan dalam MongoDB 2. 2 dan sebelumnya
- Indeks 2dsphere yang menggunakan geometri bola
db.studentgrades.find[].pretty[]_7
Indeks teks
Jenis indeks teks memungkinkan Anda untuk mencari konten string dalam koleksi
db.studentgrades.find[].pretty[]_8
Indeks hash
Jenis indeks Hashed MongoDB digunakan untuk memberikan dukungan fungsionalitas. Ini akan mengindeks nilai hash dari bidang yang ditentukan
db.studentgrades.find[].pretty[]_9
properti indeks MongoDB
Anda dapat meningkatkan fungsionalitas indeks lebih lanjut dengan memanfaatkan properti indeks. Di bagian ini, Anda akan mengetahui properti indeks yang umum digunakan ini
- Indeks jarang
- Indeks parsial
- Indeks unik
Indeks jarang
Properti jarang MongoDB memungkinkan indeks untuk menghilangkan dokumen pengindeksan dalam koleksi jika bidang yang diindeks tidak tersedia dalam dokumen dan membuat indeks yang hanya berisi dokumen yang berisi bidang yang diindeks
db..createIndex[, ]0
Hasil
Di koleksi nilai siswa sebelumnya, jika Anda membuat indeks menggunakan bidang catatan, itu hanya akan mengindeks dua dokumen karena bidang catatan hanya ada di dua dokumen
Indeks parsial
Fungsionalitas indeks parsial memungkinkan pengguna membuat indeks yang cocok dengan kondisi filter tertentu. Indeks parsial menggunakan opsi partialFilterExpression untuk menentukan kondisi filter
db..createIndex[, ]1
Hasil
Kode di atas akan membuat indeks untuk bidang nama tetapi hanya akan menyertakan dokumen yang nilai bidang skornya lebih besar atau sama dengan 90
Indeks unik
Properti unik memungkinkan pengguna membuat indeks MongoDB yang hanya menyertakan nilai unik. Ini akan
- Tolak nilai duplikat apa pun di bidang yang diindeks
- Batasi indeks ke dokumen yang berisi nilai unik
db..createIndex[, ]2
Hasil
Indeks yang dibuat di atas akan membatasi pengindeksan ke dokumen dengan nilai unik di bidang nama
Rekap indeks
Itu menyimpulkan tutorial indeks MongoDB ini. Anda telah mempelajari cara membuat, menemukan, dan menjatuhkan indeks, menggunakan tipe indeks yang berbeda, dan membuat indeks yang kompleks. Indeks ini kemudian dapat digunakan untuk lebih meningkatkan fungsionalitas database MongoDB, meningkatkan kinerja aplikasi yang menggunakan kueri database cepat