我有一个像下面这样的层次结构 组 公司 部门 成本中心 其中存储在数据库中,如下表结构。
表名: OrgHierarchy 列: Id,ParentId,级别,类型
在我的员工视图中,我有员工成本中心,部门,公司和组。
我需要帮助编写性能更好的查询来查找层次结构中特定节点的员工(可以是Group / Company / Department / Cost Center)
Select * from vw_Employee emp
Where emp.CostCentreId = @NodeId
OR emp.DepartmentId=@NodeId
OR emp.CompanyId=@NodeId
OR emp.GroupId= @NodeId
此处查询的“OR”语句数量非常慢。
有没有更好的方法来处理有效或任何其他方法?
答案 0 :(得分:2)
在条件中使用OR
会跳过索引。将其替换为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
Here是一个很好的问题。