gpt4 book ai didi

java - 使用列表作为列会导致性能不佳 - JPA

转载 作者:行者123 更新时间:2023-12-02 08:44:10 25 4
gpt4 key购买 nike

我正在使用 hibernate,并且我注意到,当使用列表作为列时,使用 JpaRepository 从数据库 (findById) 获取数据需要花费大量时间。在日志中我发现查询是正确的:

select
measuremen0_.data_id as dat1_3_0_,
measuremen0_.measurements as measurem2_3_0_,
measuremen0_.measurements_order as measurem3_0_
from
data_measurements measuremen0_
where
measuremen0_.data_id=?

但是在查询之后有一个初始化,这需要很多时间,甚至比查询本身还移动:

Preparing collection initializer:
Found row of collection:
Found row of collection:
Found row of collection:
... (times number of measurements)

准备征集的目的是什么?可以跳过吗?这是我的实体类:

@Entity
public class Data {

@Id
private long id;

@ElementCollection(fetch = FetchType.EAGER)
@OrderColumn
@Column(columnDefinition = "TEXT", updatable = false)
private List<String> measurements;

最佳答案

急切加载任何集合可能会导致性能不佳。请注意,大多数持久性提供程序将需要对数据库至少进行 N + 1 个 SELECT 来填充数据 - 第一个用于检索所有所有者实体,加上对需要填充到每个实体中的每个列表的一个 SELECT。如果您的要求可能,请删除急切获取并在选择给定数据后获取列表。

使用 TEXT 作为列定义可能会产生很大的影响,因为某些数据库不是将数据保存在普通列中,而是将每个寄存器移动到自己的寄存器或文件中。如果可以的话,将列定义替换为长度定义,这将使数据库能够更好地持久保存您的数据并随后修剪查询。

关于java - 使用列表作为列会导致性能不佳 - JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61192702/

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