gpt4 book ai didi

java - 具有大量列的 MySQL JPA 查询运行速度比预期慢得多

转载 作者:行者123 更新时间:2023-11-30 21:35:19 28 4
gpt4 key购买 nike

我有一个查询,当我通过 JPA 执行它时运行缓慢,普通的 mysql 调用需要大约 0.05 秒,通过 JPA 需要超过 3 秒,我不明白为什么。记录器显示,它有一个很长的 ObjectBuildingTime:

    number of objects=953,
total time=2673045667,
local time=2673045667,
profiling time=1273000,
Timer:Logging=616666,
Timer:ObjectBuilding=2317873662,
Timer:SqlPrepare=16289334,
Timer:Register=149633998,
Timer:StatementExecute=82975667,
Timer:Caching=82966350,
Timer:RowFetch=223775000,
time/object=2804874,

这是什么意思,我怎样才能加快速度?我的查询如下所示:

SELECT * FROM TESTENTITY t0, INNERTESTENTITY t1 WHERE (((t0.TIMESTAMPCREATION BETWEEN ? AND ?) AND (t0.DATA_TYPE IS NOT NULL)) AND ((t1.ID = t0.ID)))

Innertestentity 有许多属性 (~40) 和两个指向其他较小对象的外键。它是来自 Testentity 的映射父类(super class)。这可能是原因吗?预先感谢您的帮助。

编辑:我的实体看起来像

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DATA_TYPE")
public class TestEntity{
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name = "Employee_ID")
private EmployeeEntity employeeEntity;

@Entity
@MappedSuperclass
@DiscriminatorValue("SURVEYDATA")
public class innertestEntity extents TestEntity{
private List<Integer> counts;
@ElementCollection
@MapKeyColumn(name = "statename")
@Column(name = "value")
@CollectionTable(name = "states")
private List<Integer> states;
private List<String> namelist;

最佳答案

尝试在日志中打开 SQL 查询调试,看看它是否在您的 application.properties 中告诉您任何有趣的事情:

org.hibernate.SQL=DEBUG

您还可以尝试在您的 MySQL 配置文件(可能是/etc/my.cnf )中打开 MySQL 的慢查询日志,它也可能提供信息:

slow-query-log                  = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log

我怀疑问题可能是其中一些其他对象(如 EmployeeEntity)正在加载(如果您的代码正在访问这些字段,则可能是这种情况)。在这些日志和您的代码之间,我想您会看到是否正在访问和加载更多内容。

关于java - 具有大量列的 MySQL JPA 查询运行速度比预期慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54179165/

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