MongoDB 查询 64 位整数字段时 find() 很慢

MongoDB find() slow when querying a 64-bit integer field

我有一个名为 Elements 的 Mongo 集合,其中包含约 900 万个文档。每个文档具有以下结构:

{
  _id : "1",
  Timestamp : Numberlong(12345),
  Nationality : "ITA",
  Value: 5
}

如果我运行下面的查询:

db.Elements.find({ Nationality: 'ITA' })

查询执行速度很快(几毫秒)。

如果我 运行 以下查询:

db.Elements.find({ Timestamp: 12345 })

查询速度慢,几十秒量级。显然,如果我在 Timestamp 上添加索引,查询 运行 就会快得多。 运行 Int32 类型字段 Value 上的相同查询,与第一个查询一样快 运行s。

我想了解的是:为什么第二个查询(没有索引)的性能比第一个差得多? Mongo 对 Int64 值的处理方式是否与其他值不同?

原来是我搞错了

我正在使用 Robomongo 来执行查询;默认情况下,Robomongo 对结果进行分页(默认页面大小为 50 项)。

因为 Timestamp 字段包含几乎总是不同的值,所以查询必须执行几乎完整的扫描才能填满和 return 一页。另一方面,因为其他字段包含的值的范围有限(Value 字段,虽然它是 Int32,但在我的应用程序中有一个有限的域)我很快就得到了结果,因为我只看第一页。

当我 运行 没有页面的相同查询(例如通过附加 count 或获取执行计划)时,所有查询在没有索引的情况下性能不佳。

因此,与其他原始类型相比,似乎没有对 Int64 值进行任何特殊处理。