MongoDb索引字段排序非常慢

ht19841988 2016-02-01 04:54:53
各位大大,是这样的,比如有下面的查询语句:
> db.comment.find({"topicId":"xxxx"}).limit(10).sort({"createTime":1})

现在有2种情况:
1.在comment表中,topicId和createTime均已经设置为升序索引。并且根据条件{"topicId":"xxxx"} 是查询不出任何数据的,此时,整个查询时间耗时比较长
2.在comment表中,topicId设置为升序索引,createTime不是索引字段,并且根据条件{"topicId":"xxxx"} 是查询不出任何数据的,此时,整个查询时间耗时非常短

根据explain查看发现:
第一种情况进行了全表扫描。
第二种情况没有进行全表扫描,但是发现了另外一个问题:加入符合{"topicId":"xxxx"} 的数据条数有8000条,但是根据explain发现:
"nscannedObjects" : 186657,"nscanned" : 186657
。居然扫描了18w多个对象。

现在我的问题是:
1.针对于查询结果集为空的情况(无结果返回),并且做了排序操作,如果才能做到速度快?
2.明明符合查询的数据条数只有8000多条,为什么explain的结果有18w多个文档被扫描?
mongo新手求指导。。。
...全文
2712 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31619637 2018-08-08
  • 打赏
  • 举报
回复
谢谢大神的指导@rucypli, 添加了联合索引之后, 问题解决了
eshujiushiwo 2016-03-16
  • 打赏
  • 举报
回复
请问你的具体index 是如何的呢? 看起来像index并不是完全fetch 。
rucypli 2016-02-03
  • 打赏
  • 举报
回复
1 加topicId和createTime的联合索引 db.comment.createIndex({topicId:1,createTime:1}) 2 扫描18万个文档才能过滤出出来那8000个
ht19841988 2016-02-01
  • 打赏
  • 举报
回复
没人回答么。。。。

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧