根据方向的不同,我看到Spring Data MongoDB排序性能存在显着差异。我正在对一个属性进行排序,并在两个方向上都有索引。排序升序时,响应时间大约为80毫秒,排序时降序大约为2.7秒。 原生查询分别需要5毫秒和50毫秒。后续页面的查询速度更快,大约1秒。Spring Data MongoDB排序性能
2.7秒对我的应用程序是不可接受的,有什么我可以做的吗?
控制器:
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数据查询看起来相同。所以看起来瓶颈在mongoTemplate.find(q, Employer.class);
。
你有没有尝试把一个显式的索引属性?应该让事情变得更快 - 我们目前正在调查,并有一个指数似乎大规模影响结果。 – 2014-10-23 09:35:25
谢谢,我尝试添加'.withHint(“myindexname”)',它显着提高了性能。令人惊讶的是(至少对我来说),当我再次移除它时,表现依然不错。任何人都可以解释吗? – user3170702 2014-10-23 11:44:47