即使查询中的 only 字段是索引字段,某些查询在相对较小的集合(~200K docs)上也显得比较慢。例如(使用Java驱动程序):
eventReportColl.distinct("host").size()
需要将近三秒钟,并且在coll.distinct("host").length
个shell中需要大约两秒,即使 host 已编入索引:
coll.getIndexes()
...
{
"v" : 1,
"key" : {
"host" : 1
},
"ns" : "db.event_reports",
"name" : "host_1"
}
上述查询不会使用主机索引的原因是什么?不幸的是,它似乎没有解释()工作在不同,所以我只能假设这是原因。这是在MongoLab上运行的v2.2.4中。 (此外,虽然两三秒可能看起来不多,但是当你有一个API在返回之前运行三到四个这类查询时,它会加起来......更不用说最终的数据库大小增长了)。有没有办法强制使用索引或以其他方式加速计数查询?
答案 0 :(得分:1)
db.runCommand({distinct : 'eventReportColl', key : 'host'})
这将为您提供查询说明。您可以检查使用的索引或“n”,“nscanned”,“nscannedObjects”的数量。这有助于您了解查询速度缓慢的原因。