最近在优化一个接口,数据是从mongodb里获取的,查询时间平均在1.5秒,数据总量在100W左右,表中大概有25个字段,现在想对这个查询接口进行优化,提升查询速度。
查询条件:
{type:1,status:5,score:{$gte:5},sitemapId:{$in:[38621,44,46,38820,121337,111824,2,30707,123920,40380,122106,122107,122108]}}
排序:通过时间降序排列{displayTime:-1}
获取数据量为:20
解释一下这里的查询条件:type值有多个,这里只取type=1;
status值范围为1-5,这里取status=5;
score值范围为1-10,这里取score>5
的值;sitemapId值为[38621,44,46,38820,121337,111824,2,30707,123920,40380,122106,122107,122108]中的任意个
附上explain信息:
可以看到查询使用到了索引,但是时间还是有点长,想求教一下该怎么对这个进行优化。谢谢
这个查询使用了scanAndOrder,该操作会消耗大量内存cpu资源,因为排序是在内存中执行的。
复合索引的顺序改下可能可以解决:
mongodb 复合索引字段顺序: 精确查找的字段,可能排序的字段;
查询某个范围的字段,避免使用scanAndOrder ,scanAndOrder 会在内存中执行,而且慢,而且耗费CPU
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。