1

私は何百万ものレコードの膨大なコレクションを持っています。データを取得するために使用される 4 つのフィールドがあります。たとえばf1, f2, f3、フィルタリングやf4データの並べ替えに使用されます。3 種類のクエリがあります。

1) filter by f1 AND f2, and sort by f4
2) filter by f1 AND f2 AND f3, and sort by f4
3) filter by f1 AND f2 AND few additional fields, and sort by f4

したがって、並べ替えは常に f4 で行われます。最初の 2 種類のクエリが主に使用されます。ケース 3 の追加フィールドは、コレクション内の任意のフィールド (検索機能) である可能性があるため、インデックス作成には使用しません。

私の提案は、構成された唯一のキー(f1, f2, f3, f4)が最良の解決策かもしれないということですが、私はmongoDbの経験がほとんどないので、皆さんに尋ねることにしました.

4

1 に答える 1

2

{f1:1,f2:1,f4:1}および{f1:1,f2:1,f3:1,f4:1}最初の 2 つのクエリから始めます。をいつでも使用して.find(...).sort({f4:1}).explain()、特定のクエリに対して選択したインデックスの適切性を評価できます。さらに、f1 AND f2 AND few additional fieldsquery に対するクエリの一部が、 などの追加のインデックスの恩恵を受ける場合があります{f1:1,f2:1,addField1:1,f4:1}

また、常に昇順でソートするか降順でソートするかによって、f4:1またはを使用するかどうかにも注意してください。f4:-1f4

于 2012-09-24T19:55:54.427 に答える