我有一个选择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)
答案 0 :(得分:1)
当参数@modifiedSince
为NULL
(即)可选过滤器时,您尝试提取所有记录。
首先,如果NULL
列中有ip.[ModifiedDate]
个值,则两者都不会产生相同的结果
如果NULL
值中没有任何ip.[ModifiedDate]
,那么我认为第二种方法看起来更清晰。性能方面两者应该具有相似的执行时间