java - 优化 Spring Boot JPA 查询

标签 java spring hibernate spring-boot spring-data-jpa

我是 Jpa 新手。我有一个 List 列表,其中大约有 10000-50000 个客户端对象。

我正在遍历此列表并查询每个客户是否进行了如下购买:

List<TransactRepViewModel> temporalList = transactRepViewRepository
        .findByClientIdAndClDateBetween(clieTabModel.getClientId(),
                reportInterval.getStartDate(),
                reportInterval.getEndDate());

TransactRepViewRepository.class 方法如下所示:

List<TransactRepViewModel> findByClientIdAndClDateBetween(
        String clientId, Date startDate, Date endDate) throws DataAccessException;

我真的很想缩短搜索时间,因为迭代如此多的客户端需要相当长的时间。有什么我可以使用的技术吗?

最佳答案

如果不了解更多关于您想要做什么的信息,就很难提出具体的建议,但一般来说:

  • 执行一个大型查询,例如,创建一个存储库方法来查找您感兴趣的日期之间的所有购买情况,并确保结果包含客户端 ID 。获取结果后,将结果与 Java 代码中的客户端进行匹配。这避免了执行潜在的数千个数据库查询的开销。您可能希望根据客户 ID 和购买日期“订购”。

  • 确保所涉及的表具有正确的索引,并验证当 jpa 执行其查询时,数据库是否使用这些索引。表扫描可能会降低性能。

关于java - 优化 Spring Boot JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40426029/

相关文章:

java - 如何从 android.location.Address 对象接收门牌号?

javascript - 我可以将为 java 创建的语法文件转换为为 javascript 创建的语法文件吗?

java - 如何解决 javax.mail.AuthenticationFailedException 问题

java - 使用 Spring AOP 记录是个好主意吗?

java - Hibernate 和 Postgres 大对象 - 在实体 finalize() 方法中释放 Blob 资源

java - org.springframework.beans.NotReadablePropertyException : Invalid property of bean class

java - 长轮询 杀死服务器端的线程

Spring Boot Actuator 'http.server.requests' 公制 MAX 时间

java - 如何在hibernate java中的createSQLQuery中使用ilike和%

java - 使用 FIND_IN_SET 的 Hibernate 标准