--这样的一条select 语句,mssql是怎么处理的?select 
    GetStylePrice(StyleID) as unitprice,
    sum(qty) as qty,
    GetStylePrice(StyleID) * sum(qty) as [cost]
from style/*
 GetStylePrice(StyleID) 为一函数,参数为style.style_id返回单价,sum(qty)为总数量,unitprice * sum(qty) 为总价钱.
问题:当计算 sum(qty)时,sql已经运算了一次求和,但是当在计算总价钱cost时,sql 是不是又运算了一次sum(qty)?
同理,得到unitprice时,调用了一次GetStylePrice(StyleID),那么在计算cost时,是不是又调用了一次GetStylePrice(StyleID)??如果是这样,那么,这种运算不就是很那个不好吗?
如果sql真是这样作运算的话,有什么方法可以避免呢?*/

解决方案 »

  1.   

    不会这样运算的SQLServer的优化器会将第一个SUM操作的结果保存起来,在第二次使用的时候就直接使用这个一个值了就算你把GetStylePrice(StyleID) * sum(qty)放在最前面也没有关系,sql优化器都是拆开了执行的,然后才合并结果
      

  2.   

    怎么?还没弄明白吗?这么说吧SUM操作不仅计算了总计,而且还COUNT出了记录数比如你做AVG操作,就是SUM之后除以COUNT的,这个时候,都是取的SUM的结果,而不是从新SUM一次所以,这些简单的缓存,MS还是不会忘记的