SQL查询性能查询

时间:2015-09-22 08:25:30

标签: sql sql-server sql-server-2014

我有一个像下面这样的层次结构 组 公司 部门 成本中心 其中存储在数据库中,如下表结构。

表名: 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”语句数量非常慢。

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

1 个答案:

答案 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是一个很好的问题。