use*_*877 3 java sql performance hibernate jpa
我的JPA应用程序中存在很大的性能问题.假设我有3个实体:
class TaskResult {
Task task;
}
class Task {
User user;
}
class User {
Long id;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想得到一个特定userId的所有TaskResults的列表,那里的查询将是这样的:
SELECT * FROM TaskResult r WHERE r.task.user.id = :id
Run Code Online (Sandbox Code Playgroud)
超过10000条记录太慢了!还有其他解决方法吗?
尝试仅将SELECT子句限制为TaskRunner并使用显式JOIN:
SELECT tr
FROM TaskResult tr
JOIN tr.task t
JOIN t.user u
WHERE u.id = :id
Run Code Online (Sandbox Code Playgroud)将所有EAGER关联转换为LAZY关联,并在查询的基础上使用FETCH.
确保所有外键都有索引(Task.task_runner_id和User.task_id)
尝试运行SQL查询,看看它是否也很慢.如果SQL很慢,那么Hibernate就不会更快.
尝试从中选择较少的列,TaskRunner然后使用投影.
你说有10,000行,但你肯定不需要在UI中显示那么多实体.尝试使用比默认OFFSET分页更好扩展的键集分页(大多数JPA实现支持).
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |