首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的JPA findBy请求需要4分钟对365毫秒的SQL查询。

简单的JPA findBy请求需要4分钟对365毫秒的SQL查询。
EN

Stack Overflow用户
提问于 2020-04-07 17:23:32
回答 1查看 440关注 0票数 2

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

我的pom.xml包含:

代码语言:javascript
复制
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-tools</artifactId>
  <version>4.3.2.Final</version>
</dependency>

所以,我使用Hibernate。

我的实体看起来是这样的

代码语言:javascript
复制
@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年的RESULTSET移动到2049年,整个执行时间变得非常长!

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-04-07 17:40:28

  1. 您需要确保JPA生成的查询是您期望的查询。您可以将JPA配置为在日志文件中记录查询。
  2. 假设查询是相同的,我们可以预期响应时间大致相同。这方面的一个例外情况是结果集行已经不在内存中。在这种情况下,第一次查询执行将需要在返回结果集之前从磁盘读取到内存中。
  3. 取决于在Java代码中处理结果集的方式,从数据库检索结果集到使用该数据完成业务逻辑之间可能需要相当长的时间。您可以了解调试会话中是否存在这种情况。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61085775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档