通过ADO更新mysql表,2600条,用了30秒。太慢了,该怎么写?我觉得应该在5秒以内才正常吧
代码:
procedure TForm1.Button2Click(Sender: TObject);
 var
  I: integer;
 a,b ,c,s: string;
  wp: pYC_DEFINE;
  rfloat :string;begin
  rfloat := '%.2f';
  with ADOQuery1 do
  begin
  ADOQuery1.Open;
  for I := 0 to gyclist.Count - 1 do
  begin
  ADOQuery1.sql.clear;
  wp := gyclist.Items[I];
  a:= InttoStr(wp^.m_wsite);
  b:= wp^.m_nno;
  c := IntToStr(wp^.m_wsite);
  ADOQuery1.SQL.Add('update as_yc_define set DATA_VALUE='''+c+''''+' where (YC_DATA_ID='''+b+''')');
  ADOQuery1.ExecSQL; //执行的这一句太慢
  end;
  end;
  ADOQuery1.Close;
end; 

解决方案 »

  1.   

    创建基于 (YC_DATA_ID) 的索引。
      

  2.   

    1、在YC_DATA_ID上建立索引;
    2、将gyclist中的内容存入表中,连接替换。
      

  3.   

    update得过程首先是要找到这个数据 然后才能更新  索引要再where条件加索引以加快查找
      

  4.   

    基于YC_DATA_ID 的索引我建了,但是没有多大效果。而且我测试是表中就这连个字段! 因为第一次发帖,有好的方法一定给分!最好能给个例子!谢谢
      

  5.   

    2、将gyclist中的内容存入表中,连接替换。
    假设是LSB,字段 ID,C
    update as_yc_define A INNER JOIN LSB B ON A.YC_DATA_ID=B.ID set DATA_VALUE=B.C
      

  6.   

    执行一句  ADOQuery1.ExecSQL;  慢? 还是整个更新结束慢?如果是  ADOQuery1.ExecSQL;  慢,则建议在MYSQL命令中试一下这个SQL语句,看看速度,以断定是程序慢还是SQL语句慢。
      

  7.   

    将gyclist中的内容存入表中会不会很慢。第二部连接替换是很快!
      

  8.   

    数量有多大?如果太大,建议将内容写入TXT中,用LOAD DATA INIFILE导入MYSQL表,
    再替换