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左右
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左右
一个系统,你使用了一年后,系统响应突然变慢了,请分析变慢的原因
这个可能有很多,最容易出现的是由于数据的增多,缺失索引造成的性能下降会显同出来,
还有就是对于线性增长的数据量,统计信息也会更新的越来越慢,导致执行计划变得很差。
当然具体问题具体分析,需要排查,不仅是db方面,web应用程序池也可能会出故障,变
慢首先要确定是app还是db,如果是db,需要看程序执行的这些sql语句实际效率如何,这
个就是所谓的调优,调优最小的成本是加索引或修改sql或数据归档,这个过程需要判断
瓶颈,如果是硬件原因)CPU/Memory/IO),需要升级硬件解决。
--参考
假如 deep 有5层 也就是循环5次
我取消while
执行 循环部分一次 1秒
循环部分二次 3秒
循环部分三次 11秒
循环部分四次 20秒
循环部分五次 30秒 在2000中执行5次也只有几秒
http://blog.csdn.net/dba_huangzj/article/details/8041267