mongodb 删除数据之后,排序查询速度变得很慢

如图:

clipboard.png

左侧可以看到,我对_dateline字段做了索引。但是按照 _dateline 进行排序变得很慢,几十秒的时间。

如果去掉sort的话,速度很快。

之前没有这种情况,这个表之前有大概8000万条数据,现在删了,剩下2000万条数据,查询反而变得慢了。

我猜想是跟删除有关的。删除数据之后,是否还需要重构索引什么的吗?


我最后删除了_dateline索引,然后再创建。现在速度变得很快了。但是不明白其中的原理。
删除数据之后,索引为什么就无效了?

阅读 4.8k
1 个回答

看样子你没有完全理解索引的工作模式。简单说你需要的正确的索引是:

db.log.createIndex({picker_id: 1, _dateline: -1})

而这个索引可以取代{picker_id: 1}
关于索引可以参考官方文档:Indexes
大量删除数据后索引性能低下的bug在3.0.x的时候出现过一次,不太确定你是什么情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进