sql >> データベース >  >> NoSQL >> MongoDB

MongoDBは、単一インデックスと複合インデックスに関してfind()。sort()クエリをどのように処理しますか?

    私があなたの主張を理解したなら、これは役立つかもしれません:

    サンプル用にこれらのドキュメントがあると仮定します

    {
        field1 : 1,
        field2 : 2,
    },
    {
        field1 : 2,
        field2 : 3,
    },
    {
        field1 : 1,
        field2 : 4,
    }
    

    ステップ1: filed1専用のインデックスがあります (インデックスの名前 field1_1 )}:実行:db.test3.find({field1:1}).sort({field2:1})

    モンゴはfield1_1を使用します ドキュメントを検索するためのインデックス。 .explain()の結果は次のとおりです。

    "cursor" : "BtreeCursor field1_1",
    "isMultiKey" : false,
    "n" : 2,
    "nscannedObjects" : 2,
    "nscanned" : 2,
    

    ステップ2:複合インデックスを追加し、 field1_1_field2_1という名前を付けます 、これでフィールド1のインデックスが2つになりました。

    find().sort()を実行します クエリ、あなたは

    "cursor" : "BtreeCursor field1_1_field2_1",
    "isMultiKey" : false,
    "n" : 2,
    "nscannedObjects" : 2,
    "nscanned" : 2,
    

    結論:

    db.test3.find({field1:1}).sort({field2:1})を使用する場合 、mongoはfield1_1_field2_1を使用します インデックス。

    db.test3.find({field1:1})を使用する場合 、mongoはfield1_1を使用します インデックス。

    私はあなたの場合、あなたがちょうど field1_1_field2_1を持っているなら インデックスを作成し、db.test3.find({field1:1})を実行しています 、mongoはfield1_1_field2_1を使用します インデックスも。




    1. MongoDB:無条件の更新?

    2. MongoDBがVagrantCentosBoxで機能しない

    3. / sidekiqルートをパスワードで保護するにはどうすればよいですか(つまり、Sidekiq ::Webツールの認証が必要です)?

    4. MongoDBのストアドプロシージャ