【发布时间】:2019-10-17 09:43:18
【问题描述】:
我有以下聚合查询,用于查询大约 9+ 十万条记录:
db.getCollection('Job').aggregate([
{
"$sort": {
"lastUpdatedAt": 1
}
},
{
"$match": {
"$and": [
{ "lastUpdatedAt": { "$gte": new Date("2019-04-01") } },
{
"$or": [
{ "job.scheduledEndTime": { "$lte": new Date("2019-07-15") } },
{ "lastUpdatedAt": { "$lte": new Date("2019-07-15") } }
]
},
{ "reduced": null }
]
}
},
{ "$project": { "_id": 1 } },
{ "$sort": { "_id": 1 } },
{ "$limit": 100 }
])
在上面的查询中,我创建了复合索引,每个字段也有一个单独的索引:
{ "lastUpdatedAt": -1, "job.scheduledEndTime": -1, "reduced": 1 }
这是一个稀疏索引,因为一旦我从上述查询中获得结果并在其中执行一些操作后,我设置的所有文档中都没有缩减字段。
这是 .explain 告诉我的:https://pastebin.com/ERgChr2N
上面的查询大约需要 100 到 130 秒才能返回结果,所以有什么方法可以优化上面的查询。
提前致谢。
【问题讨论】: