Mongo 聚合时的$max 操作为什么没有走索引?
資深大佬 : diyazhu 0
今天在线上遇到的问题遇到一个慢查询的问题:
想要找到表 A 的某个字段的最大值,比如说 date 字段。原先写的查询语句如下:
想要找到表 A 的某个字段的最大值,比如说 date 字段。原先写的查询语句如下:
db.A.aggregate({$group:{_id:null, max_date:{$max:”$date”}}})
这在只有十万数据量级的时候返回非常快,可是目前已经有百万量级的,线上查询就变得很慢。
explain 后发现居然是全表扫描。
索引是肯定建了的。但建的是复合索引,date 字段是最左边的字段。
请教各位大佬,上面这个查询为什么没有走索引呢?
换一种写法,
db.A.find().sort({date:-1}).limit(1)
发现就走了索引。很奇怪!
大佬有話說 (3)