我们在我们的Web应用程序中使用Hibernate + Spring启动,我们遇到了EntityManager执行选择查询的性能问题。该查询应返回20行,并在DBArtisan中执行< 1秒。EntityManager.getResultList()的性能下降
CriteriaQuery<Long> totalCriteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<M> totalRoot = totalCriteriaQuery.from(modelClass);
totalCriteriaQuery.select(criteriaBuilder.count(totalRoot));
if (searchCriteria != null) {
totalCriteriaQuery.where(whereBuilder.build(searchCriteria, criteriaBuilder, totalRoot));
}
TypedQuery<Long> totalQuery = em.createQuery(totalCriteriaQuery);
contentQuery.setFirstResult(pageRequest.getOffset());
contentQuery.setMaxResults(pageRequest.getPageSize());
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<M> resultList = contentQuery.getResultList();
stopWatch.stop();
System.out.println("Nano seconds: "+ stopWatch.getNanoTime());
我正在寻找的原因或使用EM性能的任何建议:然而,同样的查询9秒中的代码执行。
比较SQL执行时间与HSQL并返回对象比较苹果和橙子。根据您的数据库使用分页速度非常慢,也为什么你使用分页这是一个总是变成单一结果的计数。 –
您可以发布您在DBArtisan中运行的查询以及JPA正在生成的查询吗?除非他们是完全不同的查询,否则执行时间应该有显着差异。 –
这是生成的JPA查询(稍作修改以便在DBArtisan中运行):select * from dummytable as generatedAlias0其中generatedAlias0.final_decision为null order by generatedAlias0.id asc - 返回20行 – enfany