2017-06-09 8 views
0

私が聞いたし、それらについての矛盾する多くの情報を読んで、私は私が探している答えを得るために、私のGoogleのクエリを形作るように見えることはできませんので、私はいくつかの明確化を希望しました:MongoDBインデックスはどのように機能しますか?

  • 必要がありますインデックスを適切に活用するために、インデックス内のすべてのフィールドを使用しますか?
  • Mongoは、クエリのフィールドがそのインデックスに含まれていない場合、インデックスを活用できますか?
+2

1)いいえ、2)はい –

答えて

2

セルジオのコメント時に少しを展開するには:

1は、適切にインデックスを利用するために、インデックス内のすべてのフィールドを使用する必要がありますか?

いいえcompound indexの場合、MongoDBはインデックスを使用してインデックスプレフィクスのクエリをサポートします。

たとえば、インデックス{ "a" : 1, "b" : 1 }があるとします。クエリdb.coll.find({ "a" : "something" })は、aが接頭辞ですが、bでフィルタリングしていた場合、そのインデックスを使用できないため、このインデックスを利用できます。

Mongoは、クエリのフィールドがそのインデックスに含まれていない場合、インデックスを活用できますか?

はい。クエリのすべてのフィールドがインデックスされているのが一般的に最適ですが、クエリではフィールドのサブセットにのみ一致するインデックスを使用できます。

たとえば、クエリがdb.coll.find({ "a" : "foo", "b" : "bar" })であるとします。このクエリは、{ "a" : 1 }または{ "b" : 1 }のいずれかのインデックスを使用できますが、{ "a" : 1, "b" : 1 }または{ "b" : 1, "a" : 1 }の方が一般に効率的です。

関連する問題