我有一个包含几行的存储过程:
AND ( @StartDate IS NULL OR @StartDate <= r.ReferralDate )
AND ( @EndDate IS NULL OR @EndDate >= r.ReferralDate )
是否应该重写为:
AND ( r.ReferralDate >= @StartDate or @Startdate IS NULL )
AND ( r.ReferralDate <= @EndDate or @EndDate IS NULL )
我尝试了两种方式并查看了执行计划。估计的行数略有不同,但除此之外我没有看到变化,所以我认为语句中的顺序无关紧要,但希望有人可以验证。
简短的回答是,您放置这些的顺序对 SARGability 没有任何影响。如果您希望这尽可能高效,您可以添加 RECOMPILE 提示,或使用动态 SQL 生成适当的 WHERE 子句。
由于您似乎了解所涉及的概念,所以我不会在这里打任何死马,我只会向您指出有关该主题的重要来源:T-SQL 中的动态搜索条件