Počínaje MongoDB 4.4 nyní můžeme skrýt indexy z plánu dotazů. To nám umožňuje vyhodnotit potenciální dopad vypuštění indexu, aniž bychom index skutečně vypustili.
Pokud má jeho skrytí negativní dopad, můžeme index odkrýt. To nám ušetří nutnost rušit index a poté jej znovu vytvářet.
Níže jsou uvedeny 3 způsoby, jak skrýt index v MongoDB.
hideIndex()
Metoda
db.collection.hideIndex()
metoda dělá přesně to, co slibuje – skryje index (z plánovače dotazů).
Příklad:
db.pets.hideIndex("idx_weight_-1")
Výstup:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
To skrývá index nazvaný idx_weight_-1
na pets
sbírka. Alternativně bychom mohli místo názvu poskytnout vzor klíče pro index.
Výstup hideIndex()
metoda zobrazí starou hodnotu pro hidden
pole (v tomto případě false
) a novou hodnotu (v tomto případě true
).
Pokud však skryjeme již skrytý index (nebo odkryjeme již skrytý index), tyto se nezobrazí a dostaneme pouze následující:
{ "ok" : 1 }
V každém případě je index nyní skrytý.
hideIndex()
metoda je ve skutečnosti obal pro collMod
administrační příkaz (níže).
collMod
Příkaz
collMod
administrační příkaz nám umožňuje přidávat možnosti do kolekce nebo upravovat definice zobrazení.
Můžeme jej použít ke skrytí indexu předáním hidden: true
.
Příklad:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
Výsledek:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
To vrátí stejný dokument jako hideIndex()
vrátí.
Podobné jako hideIndex()
, máte možnost zadat název indexu nebo jeho klíčový vzor.
Zde je příklad použití vzoru klíče:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
V tomto případě byl index definován pomocí { weight : -1 }
, a tak lze tuto definici použít místo názvu indexu.
K ověření můžeme použít getIndexes()
k zobrazení definice indexu:
db.pets.getIndexes()
Výsledek:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
Index můžeme také odkrýt předáním hidden: false
.
Vytvořte skrytý index
Třetím způsobem, jak skrýt index, je vytvořit jej jako skrytý index.
Chcete-li to provést, použijte hidden: true
jako jednu z možností při vytváření indexu.
Příklad:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
Výstup:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Nyní zavoláme getIndexes()
znovu zkontrolovat náš nově vytvořený skrytý index:
db.pets.getIndexes()
Výsledek:
[ { "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" } ]
Vidíme, že byl vytvořen s "hidden": true
.
Nelze skrýt indexy? Zkontrolujte toto nastavení.
mongod
featureCompatibilityVersion
musí být alespoň 4.4
než budete moci skrýt indexy. Jakmile je však index skrytý, zůstane skrytý i s featureCompatibilityVersion
nastaveno na 4.2 na binárních souborech MongoDB 4.4.
Můžete zkontrolovat featureCompatibilityVersion
nastavení pomocí následujícího kódu:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
Můžete jej nastavit pomocí setFeatureCompatibilityVersion
příkaz:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
příkaz je třeba spustit v admin
databáze.
Pamatujte také, že nemůžete skrýt _id
index.