我在 SQL Server 中有一个 select 语句,它必须将大量行与单个计算日期进行比较。
计算本身可以忽略不计;只是寻找前一个星期一。鉴于此计算日期将匹配的列已编入索引,我从应用程序代码中将计算日期作为参数传递或使用标量函数计算日期是否有任何区别?
换句话说:我应该赞成使用参数还是调用标量函数,或者在这种情况下它们基本相等?
我在 SQL Server 中有一个 select 语句,它必须将大量行与单个计算日期进行比较。
计算本身可以忽略不计;只是寻找前一个星期一。鉴于此计算日期将匹配的列已编入索引,我从应用程序代码中将计算日期作为参数传递或使用标量函数计算日期是否有任何区别?
换句话说:我应该赞成使用参数还是调用标量函数,或者在这种情况下它们基本相等?
这听起来像是您可能成为参数嗅探的牺牲品或受益于参数嗅探的情况。简而言之,SQL Server 在编译执行计划时将使用参数/变量值以确定最佳索引使用(基于列统计信息)。根据传入的值,您可能会获得截然不同的执行计划,如果稍后使用“错误”值,则性能会非常差。(一篇关于它的好文章。)。
我会使用标量函数亲自计算过程中的日期,除非需要调用此过程的任何内容来指定日期本身。然后,您始终可以在过程中使用标量函数来回退到默认值。只要参数嗅探不会给您带来令人惊讶的性能变化,它主要只是应用程序设计的问题。