gpt4 book ai didi

java - 如何优化 JPQ JOIN 查询以运行得更快

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:11 25 4
gpt4 key购买 nike

我的 JPA 应用程序有很大的性能问题。假设我有 3 个实体:

class TaskResult {
Task task;
}

class Task {
User user;
}

class User {
Long id;
}

现在,我想获取一个特定 userId 的所有 TaskResults 的列表,查询将类似于:

SELECT * FROM TaskResult r WHERE r.task.user.id = :id

对于超过 10000 条记录,它太慢了!还有其他解决方法吗?

最佳答案

  1. 尝试将 SELECT 子句限制为仅 TaskResult 并使用显式 JOIN:

     SELECT tr 
    FROM TaskResult tr
    JOIN tr.task t
    JOIN t.user u
    WHERE u.id = :id
  2. 全部转EAGER associations into LAZY ones并在查询的基础上使用 FETCH。

  3. 确保所有外键都有索引(Task.task_result_idUser.task_id)

  4. 尝试运行一个 SQL 查询,看看它是否也那么慢。如果 SQL 很慢,那么 Hibernate 就不能再快了。

  5. 尝试从 TaskResult 中选择较少的列并改用投影。

  6. 您说有 10,000 行,但您肯定不需要在 UI 中显示那么多实体。尝试使用 keyset pagination它比默认的 OFFSET 分页(大多数 JPA 实现支持)更好地扩展。

关于java - 如何优化 JPQ JOIN 查询以运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136336/

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