CREATE FUNCTION getProductItemData( @itemCode varchar(25),@weight decimal(10,2) )
RETURNS @TProductItemData Table( PitemCode varchar(25),CitemCode varchar(25) ,lineQty decimal(10,2),sumQty decimal(10,2) ,isnew bit)
BEGIN 
declare @idep smallint
set @idep=(select deep from item where itemCode=@itemCode)
insert   @TProductItemData select item.itemCode,itemline.childCode,@weight* itemline.lineQty/item.sumlineQty ,item.sumlineQty,0 from itemline inner join item on itemline.item_guid=item.guid where item.itemCode=@itemCode 
  begin  
     set @idep=@idep -1
      insert   @TProductItemData select item.itemCodeB,itemline.childCode,m.lineQty*itemline.lineQty/item.sumlineQty ,item.sumlineQty,1 from itemline inner join item on itemline.item_guid=item.guid
                  inner join @TProductItemData  m on  m.CitemCode =item.itemCode   left join V_productItemR l on m.CitemCode=l.itemCode where l.itemCode is null
 
      delete @TProductItemData from  @TProductItemData y left join V_productItemR l on y.CitemCode=l.itemCode where  l.itemCode is null   and isnew=0
      update @TProductItemData   set isnew=0 where isnew=1
  end
Return
END
这个涵数 从2000 升级到2005 后还度变的非常慢, 问题出在那,望大家指点
item表 10W左右 itemLine 40W左右
V_productItemR  2000左右

解决方案 »

  1.   


    一个系统,你使用了一年后,系统响应突然变慢了,请分析变慢的原因
    这个可能有很多,最容易出现的是由于数据的增多,缺失索引造成的性能下降会显同出来,
    还有就是对于线性增长的数据量,统计信息也会更新的越来越慢,导致执行计划变得很差。
    当然具体问题具体分析,需要排查,不仅是db方面,web应用程序池也可能会出故障,变
    慢首先要确定是app还是db,如果是db,需要看程序执行的这些sql语句实际效率如何,这
    个就是所谓的调优,调优最小的成本是加索引或修改sql或数据归档,这个过程需要判断
    瓶颈,如果是硬件原因)CPU/Memory/IO),需要升级硬件解决。
    --参考
      

  2.   

    在2005中
    假如 deep 有5层 也就是循环5次 
    我取消while  
    执行 循环部分一次  1秒
         循环部分二次   3秒
         循环部分三次   11秒
         循环部分四次   20秒
         循环部分五次   30秒  在2000中执行5次也只有几秒
      

  3.   

    先全面更新统计信息再说:
    http://blog.csdn.net/dba_huangzj/article/details/8041267
      

  4.   

    TKS 快了10秒 5次20秒, 还有没其它的原因,因为它比在2000中慢,而且2005硬件也比2000快很多
      

  5.   

    换成CTE来实现嵌套循环可能比较好