即使查詢中的只有字段是索引字段,一些查詢在相對較小的集合(〜200K文檔)上可疑緩慢。例如(使用Java驅動程序):MongoDB不使用索引來區分索引字段還是計數索引字段?
eventReportColl.distinct("host").size()
需要將近三秒鐘,在coll.distinct("host").length
大約需要兩個外殼,即使主機被索引:
coll.getIndexes()
...
{
"v" : 1,
"key" : {
"host" : 1
},
"ns" : "db.event_reports",
"name" : "host_1"
}
以上任何原因查詢會不會使用主機索引?不幸的是,它不會出現解釋()的獨特作品,所以我只能假設這是原因。這是在MongoLab上運行的v2.2.4。 (另外,雖然兩三秒看起來可能不是很多,但是當你有一個API在返回之前運行這些類型的查詢中的三個或四個時,它就會增加......更不用說最終的數據庫大小增長了)。有沒有辦法強制使用索引或以其他方式加快查詢次數?
該領域的基數是什麼?還有什麼MongoLab實例?你確定這不是MongoLab真的讓你放慢速度嗎? – Sammaye
關於cardinality這個領域有大約80K獨特的~200K文檔在集合(所有文檔都有問題的領域)。 MongoLab實例是免費層(我們的開發數據庫),但我不認爲這是問題,因爲我們有一個付費實例(共享單個節點很小),所以我對此進行了上述操作,並且驅動程序需要4秒以上並在shell中超過3秒以上(並不奇怪它會花費更長的時間,因爲這是一個更大的數據集)。 – Exupery