
如何优化 mysql 查询,高效获取部门及子部门员工
在 mysql 中,如果表结构如下:
department 表结构:
{
id: [int(11),primary_key],
name: char(32),
parent_id: [int(11)],
org_id: [int(11)],
}user 表结构:
{
id:[int(11),primary_key],
username:char(32),
org_id:[int(11)],
}department_user_relate 表结构:
{
id:[int(11),primary_key],
dept_id:int(11),
user_id:int(11),
}问题:
我们希望高效地查询某个部门(包括所有子部门)下的所有员工,避免重复获取同一员工。以 c 部门为例,查询结果应包含 c、e、f 部门的所有员工,并且小明同学不会重复出现。
解决方案:
使用 cte(公共表表达式)可以高效地解决此问题:
WITH RECURSIVE depts(id)
AS(
SELECT id FROM dept WHERE dept.id = 要查找的部门ID
UNION ALL
SELECT id FROM dept as d where d.parent_id = id )
select * from user where user.id in (
SELECT user_id FROM department_user_relate
where dept_id in (
select id from depts )
)解释:
其他方法:
通过这些优化,查询速度可以得到显著提升,并且可扩展性强,适用于多层级的部门结构。
以上就是如何高效查询MySQL中部门及所有子部门下的所有员工?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号