【发布时间】:2020-11-16 15:28:57
【问题描述】:
在MongoDB中搜索正则表达式文本,一开始速度很慢,想知道原因。
只有在JAVA Application Server这个现象上才会发现对应的慢查询。
在 MongoDB shell 中运行相应的查询时,它的运行速度非常快(索引运行良好)。
上述查询中的数据结果值为五个。 集合中的数据总数为 450,000
以下是特定于进程的查询。
=====JAVA进程===== (非常慢 5,518 毫秒)
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
请帮帮我。
【问题讨论】:
-
见stackoverflow.com/a/56159506/6267549 - 它很慢,因为 Spring 映射到 2 个级别。
-
监控时,这不是编组问题。从网络获取数据需要很长时间。
-
如果可能,请发布实际的 Java 代码。
-
@prasad_ 将 Java 代码添加到内容中。
-
Java 代码看起来不错。您是否从
mongoshell 访问相同的数据库/数据/集合?