跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Mongo 聚合时的$max 操作为什么没有走索引?
未分類
11 1 月 2021

Mongo 聚合时的$max 操作为什么没有走索引?

Mongo 聚合时的$max 操作为什么没有走索引?

資深大佬 : diyazhu 0

今天在线上遇到的问题遇到一个慢查询的问题:
想要找到表 A 的某个字段的最大值,比如说 date 字段。原先写的查询语句如下:

db.A.aggregate({$group:{_id:null, max_date:{$max:”$date”}}})

这在只有十万数据量级的时候返回非常快,可是目前已经有百万量级的,线上查询就变得很慢。
explain 后发现居然是全表扫描。

索引是肯定建了的。但建的是复合索引,date 字段是最左边的字段。

请教各位大佬,上面这个查询为什么没有走索引呢?

换一种写法,

db.A.find().sort({date:-1}).limit(1)

发现就走了索引。很奇怪!

大佬有話說 (3)

  • 資深大佬 : snachx

    你这种情况就是不会用索引的,$group 在特定条件下才会用索引

    https://docs.mongodb.com/master/core/aggregation-pipeline/#pipeline-operators-and-indexes

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    感觉 id null 那步类似做了一次映射,映射的结果已经没有 index 了。

  • 主 資深大佬 : diyazhu

    @snachx @JCZ2MkKb5S8ZX9pq 感谢大佬的回复

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具