mongoが自動的に使用するインデックスがないため、全表スキャンを実行しています。
ドキュメント で説明されているように
理由
a、bにインデックスがあり、a
で検索する場合 単独で-インデックスが自動的に使用されます。これは、インデックスの開始であるため(これは高速です)、dbは残りのインデックス値を無視できます。
a、bのインデックスは非効率的 b
で検索する場合 「startswiththisfixedstring」でインデックス検索を使用する可能性がないという理由だけで。
つまり、次のいずれかです:
- クエリに_reference_1_idを含めます(おそらく無関係です)
- または_reference_2_idにインデックスを追加します(フィールドで頻繁にクエリを実行する場合)
- またはヒントを使用する
ヒント
おそらく今のあなたの最低コストのオプションです。
_reference_1_id_1__reference_2_id_1_id_1
を使用して強制するクエリヒントを追加します 索引。これは、全表スキャンよりもはるかに高速である可能性がありますが、クエリで使用しているフィールドで始まるインデックスよりもはるかに低速です。
つまり、
db.mycoll
.find({"_reference_2_id" : ObjectId("jkl7890123456")})
.hint("_reference_1_id_1__reference_2_id_1_id_1");