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