0

私は次の状況にあります:

  • 私は次のようなドキュメントのコレクションを持っています
{a: 1, b: 'some string', c: 5, d: 7 }
{a: 2, b: 'some another string', c: 5, d: 8 }
{a: 3, b: 'yet another string', c: 5, d: 9 }
  • ユーザーがカスタムクエリを使用して検索できるようにするため、次の検索を実行できる場合があります。
{a: 2, c:5}
{c:5, d:8}
  • 使用されるフィールドの一部は必須です(例:c)
  • クエリがより高速に機能するように、cのインデックスを設定することを考えました。

db.my_collection.find({c:5})

それはうまく機能しますが、私が起動すると:

db.my_collection.find({c:5、d:8})

インデックスを使用した場合と同じ時間がかかります:(

だから私の質問は:クエリが最初にインデックスを持つキーの内部を検索し、それらのキーの内部よりも検索するように、ある種の部分インデックスを設定することは可能ですか?

4

1 に答える 1

0

私の最初の答えは不正確でした。正しく読んでいませんでした。

だから私の質問は:クエリが最初にインデックスを持つキー内を検索し、インデックスがないキー内よりも検索するように、ある種の部分インデックスを設定することは可能ですか?

dMongoDB はすでにこれを行っていますが、ドキュメント全体の選択性、形式、サイズに問題がある可能性があります。

MongoDB がcインデックスを介してフィルター処理された場合でも、実際のデータが必要になりScanObjects、ドキュメントがページングされます。

の選択性により、句dから多くのドキュメントが返され、 に対して膨大なスキャンが発生する可能性があります。cd

したがって、これらの要因が組み合わさって、クエリが遅くなる可能性があります。

通常、これを回避する最善の方法は、ここでは部分インデックスを使用せず、代わりに完全な複合インデックスを作成することです。

于 2013-02-26T10:55:54.277 に答える