1 我用 form1.ADOQuery1 查询出14万条数据
然后
用 while not form1.ADOQuery1.Eof do
begin
 if length(form1.ADOQuery1['1'])=5 then
    riqi:=t+' 0'+copy(form1.ADOQuery1['1'],0,1)+':'+copy(form1.ADOQuery1['1'],2,2)+':'+copy(form1.ADOQuery1['1'],4,2)
    else
     riqi:=t+' '+copy(form1.ADOQuery1['1'],0,2)+':'+copy(form1.ADOQuery1['1'],2,2)+':'+copy(form1.ADOQuery1['1'],5,2); j:=form1.ADOQuery1['2'];
 f:=form1.ADOQuery1['3'];
 s:= form1.ADOQuery1['4'];
 form1.ADOQuery1.Next;
end;
 遍历这14万条数据,然后用sql INSERT 语句 通过 ADOQuery2 插入另外的数据表中
用时15分钟左右,
前4,5万条数据只需要2分钟左右,越来越慢,但是数据基本都是一样
请问如何可以加快存储速度。------------

解决方案 »

  1.   

    如果ADOQuery1 与 ADOQuery2是连接的同一个数据库的话,为什么不写个存储过程来处理。如果分别连接不同的数据库的话, 那可以创建多线程来处理。
    ADOQuery1一次尽量提取少一点数据,万把条左右的。 一次提取到客户端,你也不怕客户端内存撑死去。
    你的电脑还不干别的事啦
      

  2.   

    如果是SQL数据库,可以在后台处理,包括字符串等的处理都可以在后台。前台最多只需执行一个储存过程。
      

  3.   

    如果遍历只是为了向另一表中插入的话,则不用将数据取出前台来,直接用SQL语名完成数据的插入就可以了。
      

  4.   

    Ado1是从多个文本文件读出的数据 没有连接数据库的
      

  5.   


    SQL中不也有判断语句吗?建议你用存储过程来做。
      

  6.   


    是这样,根据不用读到内存中,直接在后台用SQL语句完成是最快的。
      

  7.   

    SQL语句中也是可以直接判断的
      

  8.   

    一条语句可以搞定。呵呵效率绝对提高大大的!!
    insert B 表 select case when len([1])=5 then t+' 0'+substring(['1'],0,1)+':'+substring(['1'],2,2)+':'+substring(['1'],4,2) else t+' '+substring(['1'],0,1)+':'+substring(['1'],2,2)+':'+substring(['1'],4,2) end,[2],[3],[4] from a 求结帖,求粉丝!