日期:2014-05-17  浏览次数:20407 次

还是关于字符串累加计算的问题,请赐教?
sql版本:2000
参考的帖子:http://bbs.csdn.net/topics/340233673

按照参考的帖子,我写了两个函数,如下

create function [dbo].[combimeXsjhbh_str](
@fhjhbh varchar(20),
@fhjhid varchar(20),
@erpid varchar(20),
@khbm varchar(100)

returns varchar(200) 
as
begin  
declare @s varchar(800)   
select @s=isnull(@s+',','')+ltrim(xsjhbh)   
from fh_jhbh left join fh_jhbb on fh_jhbh.fhjhid = fh_jhbb.fhjhid   
where jhysh=1 and fhjhbh=@fhjhbh and fh_jhbh.fhjhid=@fhjhid and erpid=@erpid and khbm=@khbm 
return @s 
end 

create function [dbo].[combimeFbid_str](
@fhjhbh varchar(20),
@fhjhid varchar(20),
@erpid varchar(20),
@khbm varchar(100)

returns varchar(200) 
as
begin  
declare @s varchar(800)   
select @s=isnull(@s+',','')+ltrim(fbid)   
from fh_jhbh left join fh_jhbb on fh_jhbh.fhjhid = fh_jhbb.fhjhid   
where jhysh=1 and fhjhbh=@fhjhbh and fh_jhbh.fhjhid=@fhjhid and erpid=@erpid and khbm=@khbm 
return @s 
end 


当我执行下面的语句速度很慢,1000多条的数据要用1分钟,如何改进能提高效率:

--......表示还有很多的字段要取出来,这些字段我都用max函数取
select fhjhbh,fh_jhbh.fhjhid,erpid,......,dbo.combimeXsjhbh_str(fhjhbh,fh_jhbh.fhjhid,erpid,khbm) as xsjhbh
from fh_jhbh left join fh_jhbb on fh_jhbh.fhjhid = fh_jhbb.fhjhid 
where 1=1 and jhysh=1 and jhyshjfsj >= '2012-11-01'
group by fhjhbh,fh_jhbh.fhjhid,erpid,khbm

------解决方案--------------------
对于字符串累加这种操作本来就耗时,你还用两个函数,慢是正常的。
------解决方案--------------------
1000多条一分钟,lz需要检查一下是否用到索引。 
另外,字符串累加消耗也是可观的。 2000上,索引是第一考虑方向。如果表上不便调整索引的话,
LZ可以考虑使用临时表来处理,毕竟数据量还不算大。