MongoDB 4.4以降、クエリプランからインデックスを非表示にできるようになりました。これにより、実際にインデックスを削除せずに、インデックスを削除した場合の潜在的な影響を評価できます。
非表示にすると悪影響がある場合は、インデックスを再表示できます。これにより、インデックスを削除してから再作成する必要がなくなります。
以下は、MongoDBでインデックスを非表示にする3つの方法です。
hideIndex()
方法
db.collection.hideIndex()
メソッドは、約束どおりに機能します。インデックスを(クエリプランナーから)非表示にします。
例:
db.pets.hideIndex("idx_weight_-1")
出力:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
これにより、idx_weight_-1
というインデックスが非表示になります。 pets
コレクション。または、名前の代わりにインデックスのキーパターンを指定することもできます。
hideIndex()
の出力 メソッドは、hidden
の古い値を表示します フィールド(この場合はfalse
)と新しい値(この場合はtrue
。
ただし、すでに非表示になっているインデックスを非表示にした場合(または、すでに非表示になっていないインデックスを再表示した場合)、これらは表示されず、次のようになります。
{ "ok" : 1 }
いずれの場合も、インデックスは非表示になります。
hideIndex()
メソッドは実際にはcollMod
のラッパーです 管理コマンド(下記)。
collMod
コマンド
collMod
管理コマンドを使用すると、コレクションにオプションを追加したり、ビュー定義を変更したりできます。
hidden: true
を渡すことで、インデックスを非表示にするために使用できます 。
例:
db.runCommand( {
collMod: "pets",
index: {
name: "idx_weight_-1",
hidden: true
}
} )
結果:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
これにより、hideIndex()
と同じドキュメントが返されます。 戻ります。
hideIndex()
に似ています 、インデックス名またはそのキーパターンを指定するオプションがあります。
キーパターンの使用例は次のとおりです。
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { weight : -1 },
hidden: true
}
} )
この場合、インデックスは{ weight : -1 }
を使用して定義されました。 、したがって、この定義をインデックス名の代わりに使用できます。
これを確認するには、getIndexes()
を使用できます インデックスの定義を確認するには:
db.pets.getIndexes()
結果:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
hidden: false
を渡すことで、インデックスを再表示することもできます 。
非表示のインデックスを作成する
インデックスを非表示にする3番目の方法は、非表示のインデックスとして作成することです。
これを行うには、hidden: true
を使用します インデックスを作成するときのオプションの1つとして。
例:
db.pets.createIndex(
{ type: 1 },
{ hidden: true }
)
出力:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
それでは、getIndexes()
を呼び出しましょう。 新しく作成した非表示のインデックスをもう一度確認します:
db.pets.getIndexes()
結果:
[ { "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" } ]
"hidden": true
で作成されていることがわかります 。
インデックスを非表示にできませんか?この設定を確認してください。
mongod
featureCompatibilityVersion
少なくとも4.4
である必要があります インデックスを非表示にする前に。ただし、一度非表示にすると、featureCompatibilityVersion
を使用してもインデックスは非表示のままになります MongoDB4.4バイナリでは4.2に設定されています。
featureCompatibilityVersion
を確認できます 次のコードで設定します:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
setFeatureCompatibilityVersion
を使用して設定できます コマンド:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
コマンドはadmin
で実行する必要があります データベース。
また、_id
を非表示にすることはできません。 インデックス。