这种查询可以去任何更快:蒙戈聚集慢
db.foo.aggregate([
{"$match": {"uid": {"$in": ["40001"]}}},
{
"$group": {
"read": {"$sum": {"$cond": ["$read", 0, 1]}},
"imp": {"$sum": {"$cond": ["$important", 1, 0]}},
"_id": {"group_by": "$group_by", "ip_group": "$ip_group"},
"date": {"$min": "$date_meta.dt"}, "count": {"$sum": 1}
}
},
{"$sort": {"start_time": -1}}
])
在1mil的〜。如果uid =“40001”(大约900000 - 90%的集合)对于其他所有uid聚合来说要快得多,则大约需要2,3秒。所以看起来mongo花费大部分时间来减少结果。 我厌倦了删除条件陈述,但没有获得任何速度。所以看起来好像什么都不能做,但我可能在某个地方忽略了这一点。 哦,我尝试了索引,并删除$排序选项,但没有改进。
$ sort没有效果,因为$ group stage没有字段** start_time **,否则会变慢。我认为这取决于** $ group **舞台上的团体数量;如果** $ group **的** _ id **是一个常数(最后只有一组),我想这对您来说是极端的速度。顺便说一下,700MB还需要从磁盘读取一些时间。 – Wizard 2014-10-09 14:31:48
不mongo通过mmap()保存内存中的所有记录吗?我不认为每次阅读后都会刷新所有数据,否? – dakt 2014-10-09 15:49:42
你说得对。它在第一次读取后被缓冲。 – Wizard 2014-10-10 00:51:06