Jika kueri dapat dipenuhi oleh beberapa indeks yang ditentukan dalam koleksi, MongoDB akan menguji semua indeks yang berlaku secara paralel. Indeks pertama yang dapat mengembalikan 101 hasil akan dipilih oleh perencana kueri. Ada aspek lain untuk pemilihan indeks, tetapi secara umum ini benar sesuai dengan Pengoptimalan Kueri dokumentasi.
Metode pemilihan indeks ini dapat memilih indeks sub-optimal. Ini karena menurut pandangan MongoDB, Anda memiliki banyak indeks yang menggambarkan hal yang sama. Untuk mengurangi pemilihan indeks sub-optimal yang Anda amati, Anda dapat melakukan:
-
Hapus semua indeks lain yang menurut Anda kurang optimal.
Ini untuk memastikan bahwa perencana kueri tidak memiliki pilihan lain kecuali memilih indeks yang Anda sesuaikan untuk kueri Anda.
-
Gunakan
hint()
metodehint()
memungkinkan Anda untuk secara eksplisit memberi tahu MongoDB untuk menggunakan indeks yang ditentukan untuk kueri. Misalnya:db.tasks.find(...).hint({project: 1, created_by: 1})
Silakan lihat https://docs.mongodb.com/v2. 6/reference/operator/meta/hint/ untuk informasi lebih lanjut mengenai
hint()
.
Nuansa lain dalam kueri Anda adalah menyertakan $or
operator. Dalam hal ini, setiap istilah dalam $or
ekspresi harus memiliki indeks yang terkait dengannya , jika tidak, MongoDB akan melakukan pemindaian koleksi (BasicCursor
dalam istilah MongoDB 2.6). Ini dijelaskan lebih detail di https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors