0

以下に示すように、ユーザーという名前のコレクションがあります。

     db.users.find().pretty()
{
        "_id" : ObjectId("512efc206074b0e4bbdce792"),
        "login_id" : "dutchuser",
        "isBroker" : false

}

login_id および isBroker フィールドを使用して、このユーザー コレクションにインデックスを適用したいと考えています。

db.users.ensureIndex( { "login_id": 1, "isBroker": 1 }, { unique: false } )

私の懸念は、ほとんどのisBrokerフィールドの値がfalseになっていることです。それで、そのようにインデックスを適用できる可能性はありますか??

4

1 に答える 1

1

MongoDB のインデックスにフィルターを条件付きで適用することはできません。データを再構築したり、重複する可能性のある追加のフィールドをスキーマに導入したりする可能性はありますが、それが合理的な「最適化」であるとは確信していません。

db.stats()データベースのサイズを実際に測定し、db.{collectionname}.totalIndexSize()提案したインデックスが実際にどのような影響を与えるかを確認するために使用します。

このインデックスを使用すると、次のようになります。

db.users.ensureIndex( { "login_id": 1, "isBroker": 1 }, { unique: false } )

login_idandisBrokerまたはだけを含むクエリのみを使用できますlogin_id。実行するクエリの種類によっては、この現在未解決の問題に遭遇する可能性があり、単純なグループ化/並べ替えがisBroker非効率になる可能性があります (または、ある時点でそれがbroker_typeたとえばそうなった場合)。

于 2013-08-29T15:31:52.370 に答える