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