我有一个层次结构如下集团公司部门成本中心
表名:组织结构Id, ParentId, Level, Type
在我的员工视图中,我有员工成本中心,部门,公司和组。
我需要帮助编写性能更好的查询,以查找层次结构中特定节点的员工(可以是集团/公司/部门/成本中心)
Select * from vw_Employee emp
Where emp.CostCentreId = @NodeId
OR emp.DepartmentId=@NodeId
OR emp.CompanyId=@NodeId
OR emp.GroupId= @NodeId
这里的"OR"语句的数量使查询非常慢。
是否有更好的方法或其他方法来有效地处理?
使用OR
in条件会跳过索引。替换为UNION
:
Select *
from vw_Employee emp
Where emp.CostCentreId = @NodeId
UNION
Select *
from vw_Employee emp
Where emp.DepartmentId=@NodeId
UNION
Select *
from vw_Employee emp
Where emp.CompanyId=@NodeId
UNION
Select *
from vw_Employee emp
Where emp.GroupId= @NodeId