2

MongoDB ドキュメントから

複数のフィールドに複合インデックスがある場合は、それを使用して、フィールドの最初のサブセットに対してクエリを実行できます。したがって、a、b、cにインデックスがある場合は、[a] [a、b] [a、b、c]でクエリを使用できます

このフィールドを持つドキュメントがあるとしましょう

  1. ユーザーID
  2. 名前
  3. エクストラフィールド

私のインデックスの順序は [UserID,Name,Country] です

したがって、次のようなクエリがある場合

  var q = (from c in collection.AsQueryable()
                 where c.UserID == UserID
                 where Name = "test"
                 where Country = 1
                 where ExtraField = "check"

                 select c);

このクエリは最初の 3 つのパラメータにインデックスを使用し、次にインデックスなしで ExtraField を検索しますか?

はいの場合、このクエリでも同じですか

 var q = (from c in collection.AsQueryable()
                 where c.UserID == UserID                   
                 where ExtraField = "check"

                 select c);
4

1 に答える 1

3

両方の質問に対する答えはイエスです。

最初のクエリでは、パフォーマンスは結果セットの選択度によって異なります。そのため、インデックスの 3 つのフィールドが非常に多数のドキュメントと一致した場合、ExtraField で一致するようにすべてのドキュメントをスキャンする必要があるため、パフォーマンスが低下します。少数のドキュメントのみが一致した場合、パフォーマンスは高速になります。

ここで、クエリにインデックスの最初のフィールドがまったく含まれていない場合、インデックスは使用されません。たとえば、次のクエリではインデックスを使用できません。

var q = (from c in collection.AsQueryable()
              where Name = "test"
              where Country = 1
              select c);

インデックス内のフィールドの他の組み合わせを見つけることに関するいくつかの興味深い事実については、こちらをご覧ください。

このような質問について疑問がある場合は、explain コマンドを使用することをお勧めします。

于 2012-09-05T10:37:16.243 に答える