2017-06-09 64 views
0

我已經聽到和讀到了很多相互矛盾的信息對他們,我想澄清,因爲我似乎無法影響我的谷歌查詢來獲得我在尋找的答案:MongoDB指數如何工作?

  • 必由之路一個使用索引中的所有字段以正確使用索引?
  • 如果查詢中的字段未包含在該索引中,Mongo是否能夠利用索引?
+2

1)否,2)是 –

回答

2

要在Sergio的意見擴大一點點:

必須使用所有字段在索引中要正確地使用索引?

對於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 }通常會更有效。