インデックス内のフィールドの順序が重要です。検索と並べ替えの例に最適な複合インデックスは、実際には次のようになります。
db.test.ensure_index([("xxx",1),("_id",-1)])
検索条件はフィールド「xxx」にあるため、このフィールドをインデックスの最初に配置すると、_idで検索するよりも多くの結果が見つかります。 次に、xxxに一致するドキュメントにフィルタリングします 基準。
nを見ると allPlansのクエリオプティマイザによって考慮される各プランの番号 、BtreeCursor xxx_1 インデックスは実際に最も多くの結果を返します(34)。他のインデックスは9、10、および16の結果を返すため、特定の検索条件では効率が低下します。
インデックスの最適化の詳細については、次の記事が非常に役立ちます:MongoDB複合インデックスの最適化 。