我认为该解决方案在理论上可以帮助您提高性能,但是它也取决于标量函数的实际作用。我认为在这种情况下(我的猜测是将日期格式化为该季度的最后一天)确实可以忽略不计。
您可能需要阅读此页面,并附有建议的解决方法:
http://connect.microsoft.com/SQLServer/feedback/details/273443/the-scalar-
expression-function-would-speed-performance-while-keeping-the-benefits-of-
functions#
因为SQL Server必须在每一行上执行每个函数,所以使用任何函数都会产生游标,如性能下降。
在变通办法中,有一条评论指出
当我在连接列中使用标量UDF时,我遇到了同样的问题,其性能令人震惊。在我用包含UDF结果的临时表替换了UDF并将其用于join子句后,性能提高了几个数量级。MS团队应修复UDF以使其更可靠。
因此看来,是的,这可能会提高性能。
您的解决方案是正确的,但是我建议您考虑对SQL进行改进以使用ELSE,它对我来说看起来更干净:
AND ReportTypeID = CASE WHEN (@X = 1) THEN 1 ELSE 4 END;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)