gpt4 book ai didi

java - 简单的 JPA findBy 请求需要 4 分钟,而 SQL 查询需要 365 毫秒

转载 作者:行者123 更新时间:2023-12-02 22:37:33 25 4
gpt4 key购买 nike

我在 Spring Boot 应用程序中使用 JpaRepository 接口(interface)来映射没有外键的表。

我的pom.xml包含:

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-tools</artifactId>
<version>4.3.2.Final</version>
</dependency>

所以,我正在使用 Hibernate。

我的实体如下所示:

@Entity
@Table(name = "TABLE_NAME")
@NamedQuery(name = "CbmAnomalyDectOutput.findAll", query = "SELECT c FROM EntityName c")
public class EntityName implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "MY_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
private long id;

@Column(name = "ANOMALY_CLASS")
private String anomalyClass;

@Column(name = "ANOMALY_PROB")
private BigDecimal anomalyProb;

@Column(name = "ANOMALY_SEVERITY")
private BigDecimal anomalySeverity;

等等!

我创建了方法findByAnomalyClass(String anomalyClass)

该表包含 17,050 条记录,查询返回其中约 3,000 条记录。

但是...需要 4 分钟!!!

与SQL查询相比,执行时间缩短很多倍。

编辑:我激活了一个非常详细的日志,我注意到对象 org.hibernate.loader.Loader 是问题所在!它记录具有相同时间戳的 2048 行,然后是其他 145 行和其他行。

这是关键部分。从 2048 年的结果转向 2049 年,总体执行时间变得非常非常非常长!

有什么建议吗?

最佳答案

  1. 您需要确保 JPA 生成的查询是您期望的查询。您可以配置 JPA 以在日志文件中记录查询。
  2. 假设查询相同,我们可以预期响应时间大致相同。一个异常(exception)是当结果集行尚未在内存中时。在这种情况下,第一个查询执行需要在返回结果集之前从磁盘读取到内存中。
  3. 根据 Java 代码中结果集的处理方式,从数据库检索结果集和使用该数据完成业务逻辑之间可能需要很长的时间。您可以在调试 session 中查明是否存在这种情况。

关于java - 简单的 JPA findBy 请求需要 4 分钟,而 SQL 查询需要 365 毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com