Począwszy od MongoDB 4.4, możemy teraz ukrywać indeksy z planu zapytań. Pozwala nam to ocenić potencjalny wpływ porzucenia indeksu bez faktycznego porzucania indeksu.
Jeśli ukrycie go ma negatywny wpływ, możemy odkryć indeks. Dzięki temu nie musimy usuwać indeksu, a następnie tworzyć go ponownie.
Poniżej znajdują się 3 sposoby na ukrycie indeksu w MongoDB.
hideIndex()
Metoda
db.collection.hideIndex()
metoda robi dokładnie to, co obiecuje – ukrywa indeks (przed planerem zapytań).
Przykład:
db.pets.hideIndex("idx_weight_-1")
Wyjście:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
To ukrywa indeks o nazwie idx_weight_-1
na pets
kolekcja. Moglibyśmy alternatywnie podać wzorzec klucza dla indeksu zamiast nazwy.
Wyjście hideIndex()
metoda wyświetla starą wartość dla hidden
pole (w tym przypadku false
) i nową wartość (w tym przypadku true
).
Jeśli jednak ukryjemy już ukryty indeks (lub odkryjemy już nieukryty), nie są one wyświetlane, a otrzymujemy po prostu:
{ "ok" : 1 }
W każdym razie indeks jest teraz ukryty.
hideIndex()
metoda jest w rzeczywistości opakowaniem dla collMod
polecenie administracyjne (poniżej).
collMod
Polecenie
collMod
Polecenie administracyjne pozwala nam dodawać opcje do kolekcji lub modyfikować definicje widoków.
Możemy go użyć do ukrycia indeksu, przekazując hidden: true
.
Przykład:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Wynik:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Zwraca ten sam dokument co hideIndex()
powraca.
Podobne do hideIndex()
, masz możliwość określenia nazwy indeksu lub jego wzorca klucza.
Oto przykład użycia wzorca klucza:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
W tym przypadku indeks został zdefiniowany za pomocą { weight : -1 }
, więc ta definicja może być używana zamiast nazwy indeksu.
Aby to sprawdzić, możemy użyć getIndexes()
aby zobaczyć definicję indeksu:
db.pets.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Możemy również odkryć indeks, podając hidden: false
.
Utwórz ukryty indeks
Trzecim sposobem ukrycia indeksu jest utworzenie go jako indeksu ukrytego.
Aby to zrobić, użyj hidden: true
jako jedna z opcji podczas tworzenia indeksu.
Przykład:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Wyjście:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Teraz wywołajmy getIndexes()
ponownie, aby sprawdzić nasz nowo utworzony ukryty indeks:
db.pets.getIndexes()
Wynik:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true }, { "v" : 2, "hidden" : true, "key" : { "type" : 1 }, "name" : "type_1" } ]
Widzimy, że został utworzony za pomocą "hidden": true
.
Nie możesz ukryć indeksów? Sprawdź to ustawienie.
mongod
featureCompatibilityVersion
musi mieć co najmniej 4.4
zanim będzie można ukryć indeksy. Jednak po ukryciu indeks pozostanie ukryty nawet w przypadku featureCompatibilityVersion
ustawiony na 4.2 w plikach binarnych MongoDB 4.4.
Możesz sprawdzić featureCompatibilityVersion
ustawienie z następującym kodem:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Możesz to ustawić za pomocą setFeatureCompatibilityVersion
polecenie:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
polecenie musi być uruchomione w admin
baza danych.
Pamiętaj też, że nie możesz ukryć _id
indeks.