select dbo.f(a),dbo.f(a),dbo.f(a)+1
from t执行上述语句会不会对dbo.f(a)进行重复调用(总共需要调用三次),还是sql server自己进行了优化,只调用一次dbo.f(a),然后再计算得到另两个字段的值?

解决方案 »

  1.   


    select tmp.b as col1,tmp.b as col2,tmp.b+1 as col3
    from 
    (
    select dbo.f(a) as b from t
    ) tmp
      

  2.   

    确定是执行三次的吗?函数要是很费时的话,效率就会很低了,SQL Server不会做这种优化的吗?如果自己要优化就只能采用5楼的子查询方法了,感觉效率还是低了点
      

  3.   

    SQL对自定义函数的自动优化几乎为0,所以只能5楼的方法优化一点点
    建议,不要用太多的自定义函数,除非你明确不会产生性能问题。