数据表的更新的方法与速度?(100分)

  • 主题发起人 主题发起人 dfwasdf
  • 开始时间 开始时间
D

dfwasdf

Unregistered / Unconfirmed
GUEST, unregistred user!
用SQL查询分析器进行表的更新,数据表大约有三万行,对每行记录都必需进行更新(我是
更新库存索引的表,对每商品取期初数及本期内单据开出的商品数),我用游标进行逐行更
新,但是速度奇慢;请各位大侠指教,谢谢。
以下SQL语句:
declare @ckdm char(1),@dldm char(3),@spdm char(10),
@qckc numeric(10,2),@bqjh numeric(10,2),....

declare kcsyqcs cursor for
select ckdm,dldm,spdm,qmkc from kc200211 order by ckdm,dldm,spdm

open kcsyqcs

fetch next from kcsyqcs into @ckdm,@dldm,@spdm,@qckc
while @@fetch_status=0
begin
set @bqjh=(select sum(sl) as sl from jhd
where substring(jhdh,1,1)=@ckdm and dldm=@dldm and spdm=@spdm
and jhrq>='2002-12-01' and jhrq<'2003-01-01'
group by dldm,spdm)
if @bqjh is null set @bqjh=0
..................
update kcsy set qckc=@qckc,bqjh=@bqjh,bqth=@bqth,bqsy=@bqsy,bqyc=@bqyc
,bqyr=@bqyr,bqly=@bqly,bqxs=@bqxs,bqls=@bqls,bqwt=@bqwt
where ckdm=@ckdm and dldm=@dldm and spdm=@spdm
fetch next from kcsyqcs into @ckdm,@dldm,@spdm,@qckc
end

close kcsyqcs

deallocate kcsyqcs
 
问题应该出现在
select sum(sl) as sl from jhd
where substring(jhdh,1,1)=@ckdm and dldm=@dldm and spdm=@spdm
and jhrq>='2002-12-01' and jhrq<'2003-01-01'
group by dldm,spdm
这里,你的分组汇总检索可能没有用到索引。
 
to only you:是的,我把这一段注释掉,更新整张表用20秒左右(还是挺慢),而有这段检
索速度奇慢,我先用上索引试试,有什么优化的办法吗?
 
1、尽量不要在索引字段上使用函数,想其他的变换来实现你的要求,如substring(jhdh,1,1)
就很耗时间
2、更新的表的索引不要太多,太多也影响你的更新速度
 
接受答案了.
 
后退
顶部