1

我正在运行如下查询:

db.sales.find({location: "LLLA", 
               created_at: {$gt: ISODate('2012-07-27T00:00:00Z')}}).
         sort({created_at: -1}).limit(3)

此查询按预期工作,但执行速度不够快。我在 location 字段上有一个索引,在 created_at 字段上有一个单独的索引。如果您发现我在这里遗漏了一些明显的东西以使其更快,请告诉我。

感谢您在这方面的时间。

4

2 回答 2

1

Mongo 不会为给定的查询使用两个索引,如果你想过滤location和排序,created_at你可以添加一个复合索引:

db.sales.ensureIndex({location: 1, created_at: -1})

当您遇到此类问题时,您应该运行explain您的查询。排序尤其会导致索引的非直观复杂性,并且该explain命令有时可以清楚地说明原因。

还值得注意的是,您通常可以按_id近似插入时间进行排序(假设自动生成的ObjectId值),但这不会像复合索引那样帮助您,因为您正在过滤附加字段。

于 2012-07-27T22:49:44.947 回答
0

只需使用 ID:

db.sales.find({location: "LLLA"}).sort({_id: -1}).limit(3)
于 2012-07-27T22:35:39.410 回答