我们的 MongoDB 中有一个集合,由于用例的改变,到目前为止,一个小查询现在真的很慢。所讨论的聚合有点像这样:
db.collection.aggregate([
{
$match: {
"_id": {
$in: [ list of 1000 ids ]
}
}
},
{
$unwind: "array_field"
},
{
$match: {
"array_field.sub_field": 123456789
}
}
])
{"_id": 1, "array_field.sub_field": 1}
我现在的问题是,这里是否会考虑类似的索引,或者是否有必要让开发人员将第二个$match
索引移到第一个索引?
遗憾的是,在可预见的未来,数据模型的重新设计还未实现。
您可以构建一个小型 PoC 来验证索引的使用情况。该索引将得到利用,因为它是按照 ESR 规则构建的。
解释输出:
您可以看到
IXSCAN
的存在,这意味着该指数是有杠杆的。蒙戈游乐场
不过,仍然建议开发人员
$match
尽早移动该阶段,因为这有助于最小化中间结果的大小,从而提高性能。Mongo 游乐场