0

有些查询在相对较小的集合(约 200K 文档)上运行缓慢,即使查询中的唯一字段是索引字段也是如此。例如(使用 Java 驱动程序):

eventReportColl.distinct("host").size()

需要将近 3 秒,在 shellcoll.distinct("host").length中需要大约 2 秒,即使主机已被索引:

coll.getIndexes()

...

{
  "v" : 1,
  "key" : {
    "host" : 1
  },
  "ns" : "db.event_reports",
  "name" : "host_1"
}

上述查询使用主机索引的任何原因?不幸的是,explain() 似乎并没有起作用,所以我只能假设这是原因。这是在 MongoLab 上运行的 v2.2.4。(此外,虽然两三秒可能看起来不多,但是当您有一个 API 在返回之前运行三到四种此类查询时,它会加起来......更不用说最终的数据库大小增长了)。有没有办法强制使用索引或以其他方式加快计数查询?

4

1 回答 1

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

这将为您提供查询解释。您可以检查使用了哪个索引或“n”、“nscanned”、“nscannedObjects”有多少。这将帮助您了解查询缓慢的原因。

于 2013-06-06T02:05:11.773 回答