0

コレクションには、シャード全体で約 30 億のドキュメントが含まれます。インデックスによって完全に満たされないクエリを使用すると仮定します。また、ソートにキーを使用していません。

次のようなインデックスを持つことは理にかなっていますか (クエリに一致します):

{"sid":1, "cid":1, "mid":1}
{"cid":1, "hid":1, "mid":1}
{"mid":1, "hid":1, "sid":1}
{"hid":1, "sid":1, "cid":1, "mid":1}
{"mid":1, "cid":1}
{"mid":1, "sid":1}

または:

{sid:1}
{cid:1}
{hid:1}
{mid:1} 
4

1 に答える 1

1

これは有効な質問です。これらのキーをソートに使用していないため、クエリにソートが含まれていないと仮定します。これは、インデックスのインターセクション化がソート間で機能しないことに注意する必要があるためです。

私は言うでしょう:複合インデックスを持っている方が良いです。

維持するインデックスが増えますが、交差に必要な問題のある計算を行うことなく、クエリに対する直接的な回答が得られます。つまり、3.5b レコードを超えてこれを行っているということですが、それではうまくいきません。

複合インデックス アプローチでは、クエリ側よりもはるかに優れた挿入/更新側にメンテナンスの重みがかかります。インデックスが特定の時点でクエリを部分的にしか満たしていない場合でも。

MongoDB の交差がより高度になったようです。

一般に、各インデックス交差には 2 つのインデックスが含まれます。ただし、MongoDB は、クエリを解決するために複数/ネストされたインデックスの交差を使用できます。

http://docs.mongodb.org/manual/core/index-intersection/

そのため、2 つ以上のインデックスを使用できますが、3 つの交差を使用すると、ネストされた交差が発生し、好ましくありません。

私は以前、10gen が交差は本質的に最後の手段であり、望ましいものではないと言った同様の質問に答えました。

于 2015-05-05T21:27:24.457 に答える