2014-09-28 28 views
0

考慮以下情形:時間MongoDB的複合索引和單一指數的表現

100%我的查詢將包括一個查詢,有時也b

90%查詢將是:

{a:"somevalue"} 

和10%這將是

{a:"somevalue",b:"somevalue"} 

什麼會是僅具有一個複合索引(如果有的話)來滿足這個下行?像這樣:

{ 
    "v" : 1, 
    "key" : { 
      "a" : 1, 
      "b" : 1 
    }, 
    "name" : "a_1_b_1", 
    "ns" : "foo.bar" 

}

或將我從一個

{ 
    "v" : 1, 
    "key" : { 
      "a" : 1, 
      "b" : 1 
    }, 
    "name" : "a_1_b_1", 
    "ns" : "foo.bar" 
}, 
{ 
    "v" : 1, 
    "key" : { 
      "a" : 1 
    }, 
    "name" : "a_1", 
    "ns" : "foo.bar" 
} 

回答

2

The manual有這樣一段話將僅滿足查詢的第二索引中受益;

如果您有一個在{a:1,b:1}上具有複合索引的集合,並且該索引包含該索引的前綴,即{a:1},則假定沒有的索引具有稀疏或唯一約束,則可以刪除{a:1}索引。

MongoDB將能夠在所有使用{a:1}索引的情況下使用複合索引。

換句話說,你會使用一個索引,因爲MongoDB中沒有緩存兩項指標在內存或更新每個插入兩個單獨的索引最有可能獲得一樣好或更好的性能。

+1

完美,謝謝 – 2014-09-28 13:47:46