快速帮助优化查询

时间:2014-04-20 17:25:53

标签: sql-server

优化查询的快速帮助。我有以下查询,运行速度很慢

Select
P.*
from
dbo.Parent P
where
exists
(
Select 1
From
dbo.Child C
Where
1 = 1
and C.ColumnName1 = case when @p_ParameterValue is null then C.ColumnName1 else   P.ColumnName1 end
and C.ColumnName2 = isnull(@p_ParameterValue,C.ColumnName2)
)

当我们有参数值时会发生这种情况。当我尝试将其标准化时。它确实有效。 我在Parent中有大约60K的记录,对于每个Column1,我在Child中有记录。 ColumnName1和ColumnName2是Child上的聚簇索引。

Select
P.*
from
dbo.Parent P
where
exists
(
Select 1
From
dbo.Child C
Where
1 = 1
and C.ColumnName1 = P.ColumnName1
and C.ColumnName2 = @p_ParameterValue
)

1 个答案:

答案 0 :(得分:0)

您需要在WHERE中重写条件sargable

Select P.*
from dbo.Parent P
where exists
(
  Select 1
  From dbo.Child C
  Where 1 = 1
  and (@p_ParameterValue is null OR C.ColumnName1 = P.ColumnName1)
  and (@p_ParameterValue is null OR C.ColumnName2 = @p_ParameterValue)
)