首页 > 解决方案 > 避免在执行连接提取时生成的选择查询数量

问题描述

我有两个具有一对多映射的表 Department 和 Employee。为了从表中检索数据,我编写了以下查询。

SELECT distinct d FROM Department d join fetch d.Employee e WHERE d.orgId = :OrgId and e.phoneNumber is not null;

此查询生成主查询以从父表中获取数据,然后有 11221 个选择查询按顺序执行。

数字 11221 是查询结果应产生的雇员表中的记录数。父表有 27 条记录作为输入orgId

这会导致性能问题,导致执行的总时间为 2 分钟。

我知道这种问题已经被问过很多次了。但我没有得到关于什么会起作用的明确答案。

我尝试了以下查询。

SELECT distinct d FROM Department d
    LEFT JOIN FETCH Employee e
    ON d.department_Id
    Where e.phoneNum is not null;

还是同样的问题。

查询方法如下。

List<Department> findByOrgid(@Param("Orgid") BigDecimal Orgid);

我采取的临时方法是,查询部门表,将部门数分成 5 个组并并行运行。但是有没有更好的方法来解决这个问题。

标签: sqlhibernatejpajoinfetch

解决方案


推荐阅读