在mongodb中搜索正则表达式文本时,一开始速度很慢,所以我想知道原因。
只有在java应用服务器上才能找到相应的慢查询。
当在mongodbshell中运行相应的查询时,它的工作速度非常快(索引工作得很好)。
上述查询中的数据结果值的数目是5。收集的数据总数为45万
下面是一个特定于流程的查询。
=======java进程=====(非常慢5518ms)
public List<Contents> findContentList(int rowCnt, long rowNo, String searchContent){
Query query = new Query();
query.addCriteria((Criteria.where(DictionaryKey.content).regex("^" + searchContent)));
if (rowNo > 0) query.addCriteria(Criteria.where(DictionaryKey.contentSeq).gt(rowNo));
query.with(new Sort(Sort.Direction.ASC, DictionaryKey.contentSeq));
query.limit(rowCnt);
return this.mongoTemplate.find(query, Contents.class, Constant.CollectionName.Contents);
}
java监控工具
Query : Query: { "content" : { "$regex" : "^abcd"}}, Sort: { "contentSeq" : 1}
Collection Name : contents
MongTemplate#find() [5,518ms] -- org.springframework.data.mongodb.core.mongTemplate.find()Ljava/util/List;
=======mongodb shell=====mongodb查询(非常快,索引工作正常)
db.contents.found ({content:{"$regex" : "^abcd"}}).sort ({"contentSeq" : 1});
“contents”集合索引无效 content_1_contentSeq_1
请帮帮我。
1条答案
按热度按时间km0tfn4u1#
我找到了原因
原因是某些查询使用了错误的索引。
解决方法是通过给出提示来强制使用索引。