sql - 避免在执行连接提取时生成的选择查询数量
问题描述
我有两个具有一对多映射的表 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 个组并并行运行。但是有没有更好的方法来解决这个问题。
解决方案
推荐阅读
- python - sqlalchemy OverflowError:太大而无法使用 dataframe.to_sql 进行转换
- java - Hibernate JPA - Wildfly 启动时未检测到实体
- javascript - 反应测试类型错误:无法读取未定义的属性“地图”
- reactjs - 在 React 中将 index 设置为 key 应该会破坏 UI,但它不会
- javascript - npm 错误:cb() 从未调用,我该怎么办?
- deep-learning - 修剪模型后删除 Pytorch 中的 weight_orig
- arrays - 如何从 .dat 文件中打印所有列元素以获取大量数据(~10,000)
- protractor - Shift + 量角器
- visual-studio-code - Visual Studio Code pylint 仅查看站点包中的插件
- python - 检查人是否在语音通道中不和谐