コレクションで定義された複数のインデックスでクエリを満たすことができる場合、MongoDBは該当するすべてのインデックスを並行してテストします。 101の結果を返すことができる最初のインデックスは、クエリプランナーによって選択されます。インデックスの選択には他にもさまざまな側面がありますが、一般的に、これはクエリの最適化 ドキュメント。
このインデックス選択方法では、次善のインデックスが選択される場合があります。これは、MongoDBの観点からすると、同じことを説明する複数のインデックスがあるためです。観察した次善のインデックス選択を軽減するには、次のようにします。
-
最適ではないとわかった他のすべてのインデックスを削除します。
これは、クエリプランナーが、クエリに合わせて調整したインデックスを選択する以外に選択肢がないことを確認するためです。
-
hint()
を使用する メソッドhint()
クエリに指定されたインデックスを使用するようにMongoDBに明示的に指示できます。例:db.tasks.find(...).hint({project: 1, created_by: 1})
https://docs.mongodb.com/v2をご覧ください。 6/参照/演算子/メタ/ヒント/
hint()
の詳細については 。
クエリのもう1つのニュアンスは、$or
が含まれていることです。 オペレーター。この場合、$or
のすべての用語 式にはインデックスが関連付けられている必要があります それ以外の場合、MongoDBはコレクションスキャンを実行します(BasicCursor
MongoDB 2.6用語で)。これについては、 https://docsで詳しく説明されています。 .mongodb.com / v2.6 / reference / operator / query / or /#behaviors