Cara Meningkatkan Kueri dengan Pengindeksan MongoDB

Cara Meningkatkan Kueri Dengan Pengindeksan Mongodb



Meningkatkan kecepatan kueri sangat penting untuk MongoDB dan semua sistem database lainnya. Dengan membangun struktur data yang membantu MongoDB mengidentifikasi catatan dengan lebih cepat, pengindeksan adalah pendekatan yang ampuh untuk mempercepat dan mengoptimalkan pencarian. Indeks mencakup salinan beberapa data dari catatan untuk membuat penyelidikan menjadi lebih efektif. Ini menyederhanakan upaya yang terlibat dalam menanggapi permintaan di MongoDB. Dalam panduan ini, kita akan membahas penggunaan indeks dengan bantuan berbagai jenis pengindeksan.

Buat Koleksi

Sebelum menggunakan indeks, kita harus membuat koleksi baru di MongoDB. Kami telah membuat satu dan menyisipkan 10 dokumen, bernama “Dummy”. Fungsi find() MongoDB menampilkan semua catatan dari koleksi “Dummy” pada layar shell MongoDB di bawah.

tes> db.Dummy.find()







Pilih Jenis Pengindeksan

Sebelum membuat indeks, Anda harus terlebih dahulu menentukan kolom-kolom yang biasa digunakan dalam kriteria kueri. Indeks berkinerja baik pada kolom yang sering difilter, diurutkan, atau dicari. Bidang dengan kardinalitas besar (banyak nilai berbeda) sering kali merupakan opsi pengindeksan yang sangat baik. Berikut adalah beberapa contoh kode untuk tipe indeks yang berbeda.



Contoh 01: Indeks Bidang Tunggal

Ini mungkin jenis indeks paling mendasar, yang mengindeks satu kolom untuk meningkatkan kecepatan kueri pada kolom tersebut. Tipe indeks ini digunakan untuk kueri yang menggunakan satu bidang kunci untuk mengkueri rekaman koleksi. Misalnya Anda menggunakan kolom 'type' untuk menanyakan rekaman koleksi 'Dummy' dalam fungsi find seperti di bawah ini. Perintah ini akan memeriksa seluruh koleksi, yang mungkin memerlukan waktu lama untuk memproses koleksi yang sangat besar. Oleh karena itu, kita perlu mengoptimalkan kinerja kueri ini.



tes> db.Dummy.find({ketik: 'emp' })





Catatan koleksi Dummy di atas ditemukan menggunakan kolom “tipe” yaitu berisi suatu kondisi. Oleh karena itu, indeks kunci tunggal dapat digunakan di sini untuk mengoptimalkan permintaan pencarian. Jadi, kita akan menggunakan fungsi createIndex() dari MongoDB untuk membuat indeks pada kolom “type” dari koleksi “Dummy”. Ilustrasi penggunaan kueri ini menampilkan keberhasilan pembuatan indeks kunci tunggal bernama “type_1” pada shell.

tes> db.Dummy.createIndex({ ketik: 1 })

Mari kita gunakan kueri find() setelah berhasil memanfaatkan kolom 'type'. Pengoperasian sekarang akan jauh lebih cepat dibandingkan fungsi find() yang digunakan sebelumnya karena indeks sudah ada karena MongoDB dapat memanfaatkan indeks untuk mengambil catatan dengan judul pekerjaan yang diminta dengan cepat.



tes> db.Dummy.find({ketik: 'emp' })

Contoh 02: Indeks Majemuk

Kita mungkin ingin mencari item berdasarkan berbagai kriteria dalam keadaan tertentu. Menerapkan indeks gabungan untuk bidang ini dapat membantu meningkatkan kinerja kueri. Katakanlah, kali ini, Anda ingin menelusuri dari koleksi 'Dummy' menggunakan beberapa bidang yang berisi kondisi penelusuran berbeda saat kueri ditampilkan. Kueri ini telah mencari rekaman dari koleksi yang bidang 'tipe' disetel ke 'emp', dan bidang 'sal' lebih besar dari 350.

Operator logika $gte telah digunakan untuk menerapkan kondisi pada kolom “sal”. Sebanyak dua rekaman dikembalikan setelah menelusuri seluruh koleksi yang terdiri dari 10 rekaman.

tes> db.Dummy.find({ketik: 'emp' , sal: {$gte: 350 } })

Mari buat indeks gabungan untuk kueri yang disebutkan di atas. Indeks gabungan ini memiliki kolom “type” dan “sal”. Angka “1” dan “-1” masing-masing mewakili urutan menaik dan menurun untuk kolom “tipe” dan “sal”. Urutan kolom indeks gabungan penting dan harus sesuai dengan pola kueri. MongoDB telah memberi nama “type_1_sal_-1” pada indeks gabungan ini seperti yang ditampilkan.

tes> db.Dummy.createIndex({ ketik: 1 , akan:- 1 })

Setelah menggunakan kueri find() yang sama untuk mencari catatan dengan nilai bidang 'tipe' sebagai 'emp' dan nilai bidang 'sal' lebih besar dari sama dengan 350, kami memperoleh keluaran yang sama dengan sedikit perubahan dalam urutan dibandingkan dengan hasil query sebelumnya. Rekor nilai yang lebih besar untuk kolom “sal” kini berada di urutan pertama, sedangkan yang terkecil berada di urutan terendah menurut “-1” yang ditetapkan untuk kolom “sal” pada indeks gabungan di atas.

tes> db.Dummy.find({ketik: 'emp' , sal: {$gte: 350 } })

Contoh 03: Indeks Teks

Terkadang, Anda mungkin menghadapi situasi di mana Anda harus berurusan dengan kumpulan data yang besar, seperti deskripsi besar produk, bahan, dll. Indeks teks mungkin berguna untuk melakukan penelusuran teks lengkap pada bidang teks besar. Misalnya, kami telah membuat koleksi baru bernama “Test” dalam database pengujian kami. Memasukkan total 6 catatan dalam koleksi ini menggunakan fungsi insertMany() sesuai kueri find() di bawah.

tes> db.Test.insertMany([

{nama: 'Ana' , dari: 'Dia tinggal di London dan merupakan guru yang baik' },

{nama: 'Robert' , dari: 'Dia adalah pemain sepak bola yang luar biasa' },

{nama: 'dari' , dari: 'Mungkin bepergian ke Dubai' },

{nama: 'Yakub' , dari: 'Dia luar biasa dan kaya.' },

{nama: 'Cilian' , dari: 'Sebuah film super start mendapatkan ketenaran dalam hitungan detik' },

{nama: 'Ken' , dari: “Pencinta makanan. Dia juga bisa memakanmu.” }

])

Sekarang, kita akan membuat indeks teks pada kolom “Des” pada koleksi ini, menggunakan fungsi createIndex() MongoDB. Kata kunci “teks” pada nilai bidang menampilkan jenis indeks, yaitu indeks “teks”. Nama indeks, des_text, telah dibuat secara otomatis.

tes> db.Test.createIndex({ des: 'teks' })

Sekarang, fungsi find() telah digunakan untuk melakukan “pencarian teks” pada koleksi melalui indeks “des_text”. Operator $search digunakan untuk mencari kata “makanan” dalam catatan koleksi dan menampilkan catatan tersebut.

tes> db.Test.find({ $teks: { $pencarian: 'makanan' }});

Verifikasi Indeks:

Anda dapat memeriksa dan mencatat semua indeks yang diterapkan dari koleksi berbeda di MongoDB Anda. Untuk ini, gunakan metode getIndexes() bersama dengan nama koleksi di layar shell MongoDB Anda. Kami telah menggunakan perintah ini secara terpisah untuk koleksi “Test” dan “Dummy”. Ini menunjukkan semua informasi yang diperlukan mengenai indeks bawaan dan yang ditentukan pengguna di layar Anda.

tes> db.Test.getIndexes()

tes> db.Dummy.getIndexes()

Jatuhkan Indeks:

Saatnya untuk menghapus indeks yang sebelumnya dibuat untuk koleksi menggunakan fungsi dropIndex() bersama dengan nama bidang yang sama dengan tempat indeks diterapkan. Kueri di bawah ini menunjukkan bahwa indeks tunggal telah dihapus.

tes> db.Dummy.dropIndex({ketik: 1 })

Dengan cara yang sama, indeks gabungan dapat diturunkan.

tes> db.Dummy.drop indeks({ketik: 1 , akan: 1 })

Kesimpulan

Dengan mempercepat pengambilan data dari MongoDB, pengindeksan sangat penting untuk meningkatkan efisiensi kueri. Karena kekurangan indeks, MongoDB harus mencari seluruh koleksi untuk menemukan catatan yang cocok, yang menjadi kurang efektif seiring bertambahnya ukuran kumpulan. Kemampuan MongoDB untuk dengan cepat menemukan catatan yang tepat menggunakan struktur basis data indeks mempercepat pemrosesan kueri ketika pengindeksan yang sesuai digunakan.