MongoDB不使用索引来区分或计算索引字段吗?

时间:2013-06-05 19:53:22

标签: mongodb

即使查询中的 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在返回之前运行三到四个这类查询时,它会加起来......更不用说最终的数据库大小增长了)。有没有办法强制使用索引或以其他方式加速计数查询?

1 个答案:

答案 0 :(得分:1)

db.runCommand({distinct : 'eventReportColl', key : 'host'})

这将为您提供查询说明。您可以检查使用的索引或“n”,“nscanned”,“nscannedObjects”的数量。这有助于您了解查询速度缓慢的原因。