0

次のドキュメントを含むmongoデータベースにコレクションがあるとします

{
    "name" : "abc",
    "email": "abc@xyz.com",
    "phone" : "+91 1234567890"
}

コレクションには多くのオブジェクト (100 万程度) があり、私のアプリケーションは、このコレクションに定期的にオブジェクトを追加する以外に、このデータに対していくつかの異なる種類の検索を行います。

1 つのメソッドは 3 つの属性 (名前、電子メール、電話番号) すべてで検索を行うため、これら 3 つのフィールドの複合インデックスを作成して、この検索が効率的に機能するようにします。

db.mycollection.ensureIndex({name:1,email:1,phone:1})

現在、アプリケーションには、同じ名前のすべてのオブジェクトを取得するメソッドもあります (悪い例です)。そのため、名前フィールドのインデックスが必要です。

db.mycollection.ensureIndex({name:1})

私のアプリケーションは徐々に成長し、他のフィールドにインデックスを付ける必要があります。

さて、私の質問です。各属性に個別にインデックスを付けた場合でも、3 つすべての属性 (または 2 つの属性) の複合インデックスを維持することは理にかなっていますか?

明らかに、これは悪い例です...個人の複数の連絡先情報を格納するコレクションを作成する場合は、配列を使用します。ただし、この質問は純粋にインデックスに関するものです。

4

2 に答える 2

0

それはあなたのクエリに依存します。

次のようなクエリを実行している場合:

db.mycollection.find({"name": "abc", email: "abc@xyz.com", phone: "+91 1234567890"});

その場合、複合インデックスが最も効率的です。

于 2013-06-26T11:24:55.187 に答える
0

完成させるために私自身の質問に答えるだけです。
複合インデックスは、個々の属性のそれぞれにインデックスが付けられることを意味するのではなく、複合インデックスの最初の属性のみが検索で効率的に使用できます。インデックスが多すぎるとディスク ストレージと挿入時間が増加するため、バランスを取り、クエリを最適化するという考え方です。

于 2013-07-03T05:46:46.310 に答える