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 是个好问题。
我有如下层次结构 团体 公司 部门 成本中心 哪些存储在数据库中,如下 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 是个好问题。