fed*_*lov 24 performance mongodb aggregation-framework
我正在尝试使用聚合框架$match和$group阶段.$group阶段是否使用索引数据?我正在使用最新的mongodb版本 - 2.5.4
4J4*_*J41 42
$group 不使用索引数据.
来自mongoDB 文档:
$ match和$ sort管道运算符可以在管道开头出现时利用索引.
$ geoNear管道运算符利用地理空间索引.使用$ geoNear时,$ geoNear管道操作必须显示为聚合管道中的第一个阶段.
正如 4J41 的回答所说,$group不(直接)使用索引,尽管$sort它是管道中的第一阶段。但是,$group如果它紧跟$sort在a 之后,原则上似乎可以优化实现,在这种情况下,您可以通过将 a 放在$sort前面来有效地利用索引。
在文档中似乎没有关于是否$group有这种优化的直接答案(尽管我打赌如果有的话就会有,所以这表明它没有)。答案在MongoDB 错误 4507 中:目前$group没有这个实现,所以 4J41 的答案的第一行毕竟是正确的。如果您确实需要效率,根据应用程序,使用常规查询并在客户端代码中进行分组可能是最快的。
编辑:正如塞巴斯蒂安的回答所说,在实践中,似乎$sort在 a 之前使用(可以利用索引)$group可以大大提高速度。上面的错误仍然存在,因此它似乎没有充分利用索引的绝对最佳优势(即,在加载项目时开始对项目进行分组,而不是首先将它们全部加载到内存中)。但这仍然是值得做的。
@ArthurTacca,如蒙戈4.0$sort前$group将显著加快东西。请参阅/sf/answers/3949951281/。
| 归档时间: |
|
| 查看次数: |
12061 次 |
| 最近记录: |