SQL性能优化。哪个查询会更好?

时间:2017-06-15 11:56:52

标签: sql-server

我有一个选择satetment,其连接的条件大于或等于。

以下哪个查询将具有更好的性能

SELECT Id.[Id],id.[IdentityGuid],Id.LastUpdated, Id.[DisabledDate], Id.[DeletedDate], ip.[Hash]
                FROM [IDTable] id
                LEFT OUTER JOIN PHTable ip ON ip.IdentityId = id.Id AND ip.type= 3 AND ip.[ModifiedDate]>=
                CASE WHEN @modifiedSince is not null then @modifiedSince ELSE ip.[ModifiedDate]
WHERE id.EtId = @tId AND (@modifiedSince is null OR id.[LastUpdated] >= @modifiedSince OR ip.[ModifiedDate]>= ip.[ModifiedDate])

OR

SELECT Id.[Id],id.[IdentityGuid],Id.LastUpdated, Id.[DisabledDate], Id.[DeletedDate], ip.[Hash]
                    FROM [IDTable] id
                    LEFT OUTER JOIN PHTable ip ON ip.IdentityId = id.Id AND ip.type= 3 AND (@modifiedSince is null OR ip.[ModifiedDate]>= @modifiedSince)
    WHERE id.EtId = @tId AND (@modifiedSince is null OR id.[LastUpdated] >= @modifiedSince OR ip.[ModifiedDate]>= ip.[ModifiedDate])

表示像这样的语句时使用Case

ip.[ModifiedDate]>=CASE WHEN @modifiedSince is not null then @modifiedSince ELSE ip.[ModifiedDate] END

或者就像这样

(@modifiedSince is null OR ip.[ModifiedDate]>= @modifiedSince)

1 个答案:

答案 0 :(得分:1)

当参数@modifiedSinceNULL(即)可选过滤器时,您尝试提取所有记录。

首先,如果NULL列中有ip.[ModifiedDate]个值,则两者都不会产生相同的结果

如果NULL值中没有任何ip.[ModifiedDate],那么我认为第二种方法看起来更清晰。性能方面两者应该具有相似的执行时间