Di MongoDB, db.collection.unhideIndex()
metode memperlihatkan indeks tersembunyi.
Indeks tersembunyi adalah indeks yang disembunyikan dari perencana kueri. Saat Anda memperlihatkan indeks, indeks tidak lagi disembunyikan dari perencana kueri, dan segera tersedia untuk digunakan.
Contoh
Misalkan kita memiliki koleksi yang disebut pets
, dan kami ingin memeriksanya untuk indeks tersembunyi. Kami dapat menjalankan kueri berikut untuk mengembalikan semua indeks pada koleksi:
db.pets.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "type" : -1 }, "name" : "idx_name_1_type_-1" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Kita dapat melihat bahwa ada tiga indeks. Yang ketiga tersembunyi. Kita tahu itu, karena memiliki "hidden" : true
.
Indeks itu ada di weight
bidang. Saat kami menjalankan kueri melalui paket kueri yang menanyakan weight
bidang, kita akan melihat bahwa itu tidak menggunakan indeks.
Contoh:
db.pets.find( { weight: { $gt: 10 } } ).explain()
Hasil:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "PetHouse.pets", "indexFilterSet" : false, "parsedQuery" : { "weight" : { "$gt" : 10 } }, "queryHash" : "CEB852E7", "planCacheKey" : "851FBDB5", "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "weight" : { "$gt" : 10 } }, "direction" : "forward" }, "rejectedPlans" : [ ] }, "ok" : 1 }
Kita dapat melihat bahwa ia melakukan COLLSCAN
(pemindaian koleksi), yang berarti tidak menggunakan indeks.
Menampilkan Indeks
Kita dapat menggunakan unhideIndex()
metode untuk menyembunyikan file index. Metode ini menerima nama indeks atau pola kuncinya sebagai parameter untuk menentukan indeks mana yang akan ditampilkan.
Contoh:
db.pets.unhideIndex("idx_weight_-1")
Keluaran:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }
Keluaran dari unhideIndex()
metode menampilkan nilai lama untuk hidden
bidang (dalam hal ini true
) dan nilai baru (dalam hal ini false
).
Namun, jika kami memperlihatkan indeks yang sudah tidak disembunyikan (atau menyembunyikan yang sudah disembunyikan), ini tidak akan ditampilkan, dan kami hanya mendapatkan yang berikut:
{ "ok" : 1 }
Bagaimanapun, indeks sekarang tidak disembunyikan.
Periksa Ulang Paket Kueri
Mari kita jalankan kembali kueri sebelumnya untuk melihat seperti apa rencana kueri sekarang.
db.pets.find( { weight: { $gt: 10 } } ).explain()
Hasil:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "PetHouse.pets", "indexFilterSet" : false, "parsedQuery" : { "weight" : { "$gt" : 10 } }, "queryHash" : "CEB852E7", "planCacheKey" : "851FBDB5", "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "weight" : -1 }, "indexName" : "idx_weight_-1", "isMultiKey" : false, "multiKeyPaths" : { "weight" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "weight" : [ "[inf.0, 10.0)" ] } } }, "rejectedPlans" : [ ] }, "ok" : 1 }
Kita dapat melihat bahwa itu menggunakan IXSCAN
, yang berarti menggunakan indeks.
Periksa Apakah Indeks Telah Disembunyikan
Kita dapat menggunakan getIndexes()
metode lagi untuk memeriksa apakah indeks telah disembunyikan atau tidak.
db.pets.getIndexes()
Hasil:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "type" : -1 }, "name" : "idx_name_1_type_-1" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" } ]
Kami melihat tiga indeks yang sama seperti yang kami lihat pada contoh sebelumnya, tetapi kali ini kami tidak melihat "hidden" : true
.
Tapi kami juga tidak melihat "hidden" : false
.
Menampilkan indeks hanya menghapus "hidden" : true
bagian dari hasil getIndexes()
. hidden
opsi hanya tersedia jika nilainya true
. hidden
option adalah nilai boolean, jadi kami dapat menyimpulkan bahwa jika bukan "hidden" : true
, maka "hidden" : false
.
Tidak Dapat Menyembunyikan/Menampilkan Indeks? Periksa Setelan ini.
mongod
featureCompatibilityVersion
minimal harus 4.4
sebelum Anda dapat menyembunyikan index. Namun, setelah disembunyikan, indeks akan tetap tersembunyi bahkan dengan featureCompatibilityVersion
setel ke 4.2 pada binari MongoDB 4.4.
Anda dapat memeriksa featureCompatibilityVersion
setting dengan kode berikut:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Anda dapat mengaturnya menggunakan setFeatureCompatibilityVersion
perintah:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
perintah harus dijalankan di admin
basis data.
Perhatikan juga, Anda tidak dapat menyembunyikan _id
indeks.