0

大量のクエリには 2 種類あります。1 つは、日付 (lte)、配列に格納された値、2 番目の配列に格納された値、1 つの整数 (gte)、および 1 つの浮動小数点 (gte) の 5 つの属性を含むドキュメントを探します。

2 番目には、これらの 5 つの属性に加えて、さらに 2 つの属性が含まれます。

クエリごとに 1 つずつ、2 つの複合インデックスを作成する必要がありますか? 各属性のカーディナリティが高いと仮定します。

作成すると、各クエリには複数の配列が含まれるため、Mongo の制限によりインデックスを作成できないようです。この場合、人々は Mongo データベースをどのように構築するのでしょうか?

MongoMapper を使用しています。

ありがとう!

4

1 に答える 1

1

クエリの最初の範囲の後のクエリのインデックスは、追加のインデックス フィールドの値が大幅に低下します。

概念的には、クエリからより小さなサブツリーを刈り取るインデックスの追加フィールドを考えるのが最善だと思います。最初の範囲は大きな枝を切り落とし、2 番目はそれより小さく、3 番目は小さいというように切り落とします。私の一般的な経験則では、インデックス内のクエリからの最初の範囲だけが価値があります。

この規則の注意点は、返された結果の並べ替えを支援するために、インデックス内の追加フィールドが役立つ可能性があることです。

最初のクエリでは、2 つの配列値にインデックスを作成し、範囲のどちらかが最も多くのドキュメントを除外します。範囲 (lte および gte) を閉じることができない限り、日付フィールドが高い除外を提供する可能性は低いです。整数と浮動小数は、ドメインを知らずに見分けるのは困難です。

2 番目のクエリの 2 つの追加属性もクエリで範囲を使用し、除外値が大幅に高くない場合は、1 つのインデックスだけを使用します。

ロブ。

于 2013-03-27T02:06:48.193 に答える