各位大大,是这样的,比如有下面的查询语句:
> 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新手求指导。。。