使用Mongo 3.2。MongoDB - 與查詢不同,不使用索引
比方說,我有這個模式的集合:
{ _id: 1, type: a, source: x },
{ _id: 2, type: a, source: y },
{ _id: 3, type: b, source: x },
{ _id: 4, type: b, source: y }
當然,我的db是大得多,還有更多的類型和來源。
我已經創建了4個指標種類和來源的組合(即使1應該是足夠了):
{type: 1}
{source: 1},
{type: 1, source: 1},
{source: 1, type: 1}
現在,我正在此不同的查詢:
db.test.distinct("source", {type: "a"})
的問題是,這個查詢需要花費更多的時間。 如果我runCommand運行:
db.runCommand({distinct: 'test', key: "source", query: {type: "a"}})
這是結果我得到:
{
"waitedMS": 0,
"values": [
"x",
"y"
],
"stats": {
"n": 19400840,
"nscanned": 19400840,
"nscannedObjects": 19400840,
"timems": 14821,
"planSummary": "IXSCAN { type: 1 }"
},
"ok": 1
}
出於某種原因,蒙戈只使用type: 1
索引進行查詢的階段。 它應該使用索引也爲不同階段。 這是爲什麼?使用{type: 1, source: 1}
指數會好很多,不是嗎?現在它正在掃描所有type: a
文檔,同時它有一個索引。
我做錯了什麼?對於這種獨特的方式,我有更好的選擇嗎?
來自問題,看起來應該已經在3.4中實現了? –
@Alvin Wong你說得對,謝天謝地這個功能已經在Mongo 3.4中實現了。 – Robert