【问题标题】:Query, @Query, @NamedQuery : SpringBoot vs JPA performance查询、@Query、@NamedQuery:SpringBoot 与 JPA 的性能对比
【发布时间】:2022-01-03 00:15:46
【问题描述】:

我正在尝试优化端点的响应时间。我想知道是否应该投入精力重构代码以了解三种不同方法的执行情况:

  1. 程序类javax.persistence.Query
  2. 注解javax.persistence.NamedQuery
  3. 注解org.springframework.data.jpa.repository.Query

事实上,我们使用 Spring 的@Query。并且要完成的重构量使得我宁愿在深入研究之前获得一些理论知识。

使用这三个选项各自的优点和缺点是什么?

我们的堆栈:Postgres、EclipseLink 和 SpringBoot。

【问题讨论】:

    标签: spring spring-boot jpa spring-data-jpa spring-data


    【解决方案1】:

    javax.persistence.NamedQuery 注释只是提供了一种在实体类中指定查询的方法,而不是例如作为 spring-data-repository 接口 (org.springframework.data.jpa.repository.Query) 的一部分。由于只是查询定义的位置不同,因此两个选项之间的性能差异应该不大。

    javax.persistence.Query 接口由 JPA 实现在内部使用,因此以某种方式在自己的代码中显式使用它并不能获得太多性能。

    在深入研究该方向之前,在优化响应时间时应首先评估以下事项:

    • 数据库的查询速度(索引是否正确使用?)
    • ORM 发出的查询数(例如,通过使用 @EntityGraphs 指定合理的获取行为来避免 n+1 问题)

    【讨论】:

    • 我已经调查并修复了上述建议。我正处于试图充分利用应用程序容量的最后阶段。我的思路是“可能在使用Query 时需要完成一些重复的工作,并且只有使用正确的入口点才能将结果缓存在某处”。我想到的一个例子是参数化的 SQL 字符串:它是在初始化期间被缓存并与每个查询相关联,还是在每次调用时重新计算?
    • 好的,我明白了,语句缓存通常由 jdbc 驱动程序负责,所以我希望剩下的优化潜力不多
    猜你喜欢
    • 2020-08-03
    • 2013-01-11
    • 1970-01-01
    • 2023-03-16
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    相关资源
    最近更新 更多