mongoTemplate count index(索引)

spring整合mongo给出的mongoTemplate在进行count的时候是不使用索引的(find可以)!!!!!虽然mongo执行语句时会自动帮我们进行优化,但可能并不是我们想要使用的那个索引

  1. 表字段

  2. 加上索引

  3. 使用客户端进行查询 db.play_following.find({"obj_type":"game","channel":"hao"}).hint("channel_index").count() (hint表示使用某一个索引) 查询结果(1.6s内返回)

  4. 使用mongoTemplate进行查询(60s返回,机器性能也有关系) 跟踪源码可以看到在count的时候先进行了query转化为DBObject的动作,但是我们的hint并没有被其加以转化,所以我们索引并没有被使用

  5. 解决办法:使用mongo原生的驱动(以下为参考): mongoTemplate.getDb().getCollection(PlayerFollowingPO.class.getAnnotation(Document.class).collection()).count(countDBObject, new DBCollectionCountOptions().hintString(index))

猜你喜欢

转载自my.oschina.net/u/3770892/blog/2980354