MongoDB のインデックスが有効かどうかを確認する方法
クエリプランを確認することでMongoDBインデックスが有効かどうかを調べられます。explain()メソッドはインデックスの使用、クエリオプティマイザの決定、実行時間などのクエリプランの詳細を返します。
インデックスが有効になっているか確認する手順は次のとおりです。
- MongoDBシェルを開く。
- 使用find()方法执行查询语句,并在查询语句后面添加explain()方法。
たとえば、「mycollection」コレクションの「myfield」フィールドに対して索引が有効かどうかを確認するには、以下のコマンドを実行します。
db.mycollection.find({ myfield: "value" }).explain()
- 上記のコマンドを実行すると、インデックスの使用を含むクエリの詳細な実行計画が返されます。返された情報内で、「winningPlan」フィールドに注目してください。これは、MongoDBが選択したクエリの実行計画を説明しています。「winningPlan」フィールド内の「inputStage」の部分を見て、インデックスが使用されているかどうか確認してください。
inputStage に「IXSCAN」または「IDHACK」があればインデックスが効いている。
ネイティブに日本語で言い換えると次のようになります。
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "mydatabase.mycollection",
"indexFilterSet" : false,
"parsedQuery" : {
"myfield" : {
"$eq" : "value"
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"myfield" : 1
},
"indexName" : "myfield",
"isMultiKey" : false,
"direction" : "forward",
"indexBounds" : {
"myfield" : [
"[\"value\", \"value\"]"
]
}
}
},
...
},
...
}
上の例では、「winningPlan」でインデックスの使用状況を確認できます。「inputStage」にある「IXSCAN」はインデックススキャンを使用したことを示しています。
本番環境ではexplain()メソッドを使用するとクエリを実行するため、データベースのパフォーマンスに影響が出る可能性があります。そのため、インデックスの効き具合を確認したり、クエリのパフォーマンスを最適化した場合などにのみ使用してください。