【发布时间】:2014-10-22 08:12:08
【问题描述】:
我发现 Spring Data MongoDB 排序性能存在显着差异,具体取决于方向。我正在对一个属性进行排序,并且在两个方向都有索引。升序排序时响应时间约为 80 毫秒,降序排序时响应时间约为 2.7 秒。 原生查询分别需要 5 毫秒和 50 毫秒。后续页面的查询要快一些,大约 1 秒。
我的应用无法接受2.7s,有什么办法吗?
控制器:
String q = URLDecoder.decode(query);
Sort.Direction d = Sort.Direction.ASC;
if (direction == -1) {
d = Sort.Direction.DESC;
}
String[] properties = sort.split(",");
Sort s = new Sort(d, Arrays.asList(properties));
Pageable p = new PageRequest(page, size, s);
List<Employer> list = employerRepository.find(q, p);
存储库:
@Override
public List<Employer> find(String query, Pageable page) {
Query q = new BasicQuery(query).with(page);
return mongoTemplate.find(q, Employer.class);
}
更新 1: 我已在 MongoDB 上启用分析,并且本机和 Spring Data 查询看起来相同。所以看来瓶颈在mongoTemplate.find(q, Employer.class);。
【问题讨论】:
-
你试过在属性上放置一个明确的索引吗?应该让事情变得更快 - 我们目前正在调查并且有一个索引似乎会对结果产生巨大影响。
-
谢谢,我尝试添加
.withHint("myindexname"),它显着提高了性能。令人惊讶的是(至少对我来说),当我再次删除它时,性能仍然很好。谁能解释一下?
标签: java spring mongodb spring-data spring-data-mongodb