请问高数,我的sql server 一个表的数据量达到200W现在根据条件进行查询是并把查询出来的进行更新的时候出现超时,将怎么做给点建议。我的sql语句是:updaate t_base_goods_decl set fee_flag=1 where decl_no='441900000000'其中这个查询用的叫频繁并且decl_no为主键并且建立了索引。执行这个时候有可能会循环两三百次update操作,有时候出现超时。我的程序是delphi开发的。请问高手该怎么解决好。既然已经建立主键及相关索引,超时就是你SQL语句的问题了. 不过才200万,应该是没问题的.我目前处理的两表,一为200万,一为2000万,两表联合查询,插入,更新未出现你的情况.
decl_no为主键 where decl_no='441900000000'既然 decl_no为主键 那么每次就更新一条数据 数据库对该数据进行的是 行级锁应该是你循环更新造成的问题 你循环更新修改下吧
你的语句有问题,丢上来,delphi程序也丢上来!
MainTable.First; while not MainTable.Eof do begin SqlText:= 'update Base_t_goods_decl set Fee_Flag=1,Note_No='''+Ser_No+''''+',Charge_Date='''+datetostr(chargefeedate)+''' where DECL_NO='''+Decl_No+'''' ; ADOCmd.CommandText:=SqlText; ADOCmd.Execute; MainTable.Next; end; MainTable.First;其中Decl_No为每条报检单号码。以上是delphi语句
改为批量更新
并看一下重建索引整理一下。并把不需要记录日志进行取消
...
不过才200万,应该是没问题的.我目前处理的两表,一为200万,一为2000万,两表联合查询,插入,更新未出现你的情况.
where decl_no='441900000000'既然 decl_no为主键
那么每次就更新一条数据 数据库对该数据进行的是 行级锁应该是你循环更新造成的问题
你循环更新修改下吧
while not MainTable.Eof do
begin
SqlText:= 'update Base_t_goods_decl set
Fee_Flag=1,Note_No='''+Ser_No+''''+',Charge_Date='''+datetostr(chargefeedate)+'''
where DECL_NO='''+Decl_No+'''' ;
ADOCmd.CommandText:=SqlText;
ADOCmd.Execute;
MainTable.Next;
end;
MainTable.First;其中Decl_No为每条报检单号码。以上是delphi语句
powerbuilder11&SQL QQ群请加:6539042
估計也是類似的處理方法吧,牛!