本帖最后由 woshishui1010 于 2009-10-16 18:18:35 编辑

解决方案 »

  1.   

    单纯从程序角度来看,没有什么问题了。
    但从系统架构上来看:
    1 先将原来的表全部打开,然后用Locate会不会快一些?(不确定,需要测试)
    2 field1字段是否建立有索引?
    3 文本文件中是否可能有重复记录?如果不存在重复记录,可以先将插入语句导入为一个文本文件,然后批量执行,或者将经程序处理后的数据另外保存为一个文本文件,然后用load data in file导入。另外,你说速度太慢,是有多慢,有没有显示导入进度?根据机器的不同,如果每秒钟导入100条数据左右的话就不能算慢。
      

  2.   

    回 windindance :
    文件文件中的整条记录是唯一的。每条文本纪录由多个字段值组成,由"~~~~~"分隔。
    插入/更新到数据库表的字段均有多个,有的字段有索引,有的没有,主帖中我只写了一个,为了简单
    ________________________________________________________
    主贴补充:
    一、涉及到的几个数据库表,有的是按月分表的,有的是按季分表的,表的字段少的有20多个,多的有70多个。
    二、数据表每天均有新数据要Insert 或 Update ,数据表的月纪录数在300W左右。
    三、插入的数据有不少均须通过delphi程序分析计算后再插入/更新到数据库表。由于上面的一些特性,似乎不能:
    (文本文件中是否可能有重复记录?如果不存在重复记录,可以先将插入语句导入为一个文本文件,然后批量执行,或者将经程序处理后的数据另外保存为一个文本文件,然后用load data in file导入。)四、本来产生文本数据时,就可以 insert / update到数据库,但我为了加快数据采集的速度,所以我把采集数据逻辑独立出来了。这样我也好维护。
      

  3.   

    你是在客户端上传的?这样的话严重受限于网络速度。
    你可以把客户端的文本文件压缩后上传到服务器,在服务器上执行。(因为在客户端上传的话,容易出错且无法压缩。)插入/更新到数据库表的字段:查询的字段要建立索引即可。先将插入语句导入为一个文本文件:
    生成文本文件:
    insert t() ....
    update t set ...
    insert t()....
    然后将这个文本文件压缩,上传到服务器,执行。