SQL查询性能查询

SQL Query Performance Query

我有如下层次结构 团体 公司 部门 成本中心 哪些存储在数据库中,如下 table 结构。

Table 名称:OrgHierarchy 列:Id、ParentId、级别、类型

在我的员工视图中,我有员工成本中心、部门、公司

我需要帮助编写性能更好的查询以查找层次结构中特定节点的员工(可以是 Group/Company/Department/Cost 中心)

  Select * from vw_Employee  emp
    Where emp.CostCentreId = @NodeId 
    OR emp.DepartmentId=@NodeId 
    OR emp.CompanyId=@NodeId 
    OR emp.GroupId= @NodeId

此处“OR”语句的数量使查询非常慢。

是否有更好的方法来有效处理或任何其他方法?

在条件中使用 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 是个好问题。