优化查询的快速帮助。我有以下查询,运行速度很慢
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
)
答案 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)
)