Ab MongoDB 4.4 können wir jetzt Indizes aus dem Abfrageplan ausblenden. Dadurch können wir die potenziellen Auswirkungen des Löschens eines Index bewerten, ohne den Index tatsächlich zu löschen.
Wenn das Ausblenden negative Auswirkungen hat, können wir den Index einblenden. Dadurch müssen wir den Index nicht löschen und dann erneut erstellen.
Im Folgenden finden Sie 3 Möglichkeiten, einen Index in MongoDB auszublenden.
Der hideIndex()
Methode
Der db.collection.hideIndex()
-Methode tut genau das, was sie verspricht – sie verbirgt den Index (vor dem Abfrageplaner).
Beispiel:
db.pets.hideIndex("idx_weight_-1")
Ausgabe:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Das verbirgt einen Index namens idx_weight_-1
auf den pets
Sammlung. Wir könnten alternativ das Schlüsselmuster für den Index anstelle des Namens angeben.
Die Ausgabe von hideIndex()
Methode zeigt den alten Wert für hidden
an Feld (in diesem Fall false
) und den neuen Wert (in diesem Fall true
).
Wenn wir jedoch einen bereits ausgeblendeten Index ausblenden (oder einen bereits eingeblendeten einblenden), werden diese nicht angezeigt, und wir erhalten nur Folgendes:
{ "ok" : 1 }
In jedem Fall ist der Index jetzt ausgeblendet.
Der hideIndex()
-Methode ist eigentlich ein Wrapper für collMod
Verwaltungsbefehl (unten).
Der collMod
Befehl
Das collMod
Verwaltungsbefehl ermöglicht es uns, Optionen zu einer Sammlung hinzuzufügen oder Ansichtsdefinitionen zu ändern.
Wir können es verwenden, um einen Index zu verbergen, indem wir hidden: true
übergeben .
Beispiel:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Ergebnis:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
Dies gibt dasselbe Dokument wie hideIndex()
zurück zurück.
Ähnlich wie hideIndex()
haben Sie die Möglichkeit, den Indexnamen oder sein Schlüsselmuster anzugeben.
Hier ist ein Beispiel für die Verwendung des Schlüsselmusters:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
In diesem Fall wurde der Index mit { weight : -1 }
definiert , daher kann diese Definition anstelle des Indexnamens verwendet werden.
Um dies zu überprüfen, können wir getIndexes()
verwenden um die Definition des Index zu sehen:
db.pets.getIndexes()
Ergebnis:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Wir können den Index auch sichtbar machen, indem wir hidden: false
übergeben .
Erstellen Sie einen versteckten Index
Die dritte Möglichkeit, einen Index zu verbergen, besteht darin, ihn als versteckten Index zu erstellen.
Verwenden Sie dazu hidden: true
als eine der Optionen, wenn Sie den Index erstellen.
Beispiel:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Ausgabe:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Rufen wir nun getIndexes()
auf erneut, um unseren neu erstellten versteckten Index zu überprüfen:
db.pets.getIndexes()
Ergebnis:
[ { "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" } ]
Wir können sehen, dass es mit "hidden": true
erstellt wurde .
Können Indizes nicht ausgeblendet werden? Überprüfen Sie diese Einstellung.
Der mongod
featureCompatibilityVersion
muss mindestens 4.4
sein bevor Sie Indizes ausblenden können. Ein einmal ausgeblendeter Index bleibt jedoch auch mit featureCompatibilityVersion
ausgeblendet auf MongoDB 4.4-Binärdateien auf 4.2 gesetzt.
Sie können die featureCompatibilityVersion
überprüfen Einstellung mit folgendem Code:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Sie können es mit setFeatureCompatibilityVersion
festlegen Befehl:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
Die setFeatureCompatibilityVersion
Der Befehl muss im admin
ausgeführt werden Datenbank.
Beachten Sie auch, dass Sie die _id
nicht ausblenden können index.