以下的描述是我在“sql数据库中的两个表的记录进行比较!并将结果写入表中!”提问里的描述,现在我也实现了这个功能,不过是用Delphi+access实现,字段也没有那么多,但是记录多的时候可达10万条,所以,执行速度是关键!结果测算,我要实现所有的运算达到30小时左右,因此我要提的问题是如何提高这个速度?(我用的是ADO连接数据库的方式)   以下为我要实现的功能!大家可以看看我以前提的“sql数据库中的两个表的记录进行比较!并将结果写入表中!”问题。sql数据库中的两个表的记录进行比较!sql数据库中有A表和B表,字段结构相同,字段名称为NO,1,2,3,4,5,6,7,8,9,10等11个字段。A,B表中的数据是有a,b,c字符组成,其中A表中的记录是由单个字符构成(即a,b,c),B表中的记录是由单个或双个或三个字符构成(如a,b,c,ab,bc,ac,abc)。现比较A,B表的记录,如果A表的数据包含在B表中,则视为相同,统计A,B表中的字段有几个相同,并将统计的结果写入A表新增加的字段中。 
    也就是说A表的每条记录要和B表的每条记录进行比较,假设A表的第一条记录和B表的所有的800条记录进行比较,即得出800个结果,得出的结果写入A表第一条记录的后面,包括原来A表的11个字段加上得出的结果共有11+800=811个字段了。A表的其他记录如此依次和B表的记录进行比较,就可以得出最终的结果! 
    或者换一种方式,即A表的所有记录依次和B表的第一条记录开始比较,就得到一个字段(字段11)的结果,写入A表中。然后在和B表的第二条记录开始比较,得到字段12的结果,写入A表中,如此类推,直到和B表的最后一条记录比较完成,得到最后一个字段811。 如A表 
NO  1  2  3  4  5    6  7  8  9    10  
1   a  c  b  b  c    a  c  c  b    a 
2   b  a  b  c  b    b  a  b  c    a 
3   a  c  a  b  c    b  b  c  a    c 
4   c  c  a  b  a    b  c  a  c    b 
.......... 
10000 B表 
NO  1   2   3   4   5    6   7   8   9    10  
1   bc  ab  bc  ac  abc  ac  ab  bc  ac   ab 
2   ac  abc ab  bc  ac   ab  ab  bc  abc  ab  
3   ab  bc  abc ab  abc  ac  bc  ac  abc  ac 
4   abc ab  bc  bc  ac   ab  ab  ab  ac   bc 
....... 
800 得到的A表结果(共有7个字段相同) 
NO  1  2  3  4  5    6  7  8  9    10  11  12  13  14...810 
1   a  c  b  b  c    a  c  c  b    a   5   9   10   5    ... 
2   b  a  b  c  b    b  a  b  c    a   9   8   5    8    ... 
3   a  c  a  b  c    b  b  c  a    c   4   9   9    7    ... 
4   c  c  a  b  a    b  c  a  c    b   4   8   7    7    ... 
....... 
10000 解释: 
    A表的第一条记录和B表的前面4条记录比较后的结果为5,9,10,5  写入A表的11,12 ,13,14字段里,A表的第二条记录和B表的前面4条记录比较后的结果为9,8,5,8 写入A表的11,12 ,13,14字段里, A表的第三条记录和B表的前面4条记录比较后的结果为4,9,9,7写入A表的11,12 ,13,14字段里,A表的第二条记录和B表的前面4条记录比较后的结果为4,8,7,7 写入A表的11,12 ,13,14字段里。 
    或者用我说的第二个方式,先得出字段11的值,然后是字段12的值,依此类推... A表有1万条记录,B表中有800条记录,A表中的每条记录和B表中的每条记录进行比较,A表的每条记录和B表800条记录比较后把比较结果写到A表记录新增的800条字段里进行存储。  

解决方案 »

  1.   

    看的很晕,800多个字段?好像sql2000都不支持吧。。access反而能支持?
    记录数这么多,access虽然能支持,恐怕也还是用sql200x吧
      

  2.   

    呵呵,我进行了处理,到excel中去还原那么多字段的!access并没有那么多字段!但是过程还是这样的过程,一个记录要进行800次比较,有10万字段,所以时间比较长!
      

  3.   

    呵呵,我是经过处理的,再在excel中把800条字段还原来处理,不过过程还是这样!我就想处理完这些数据速度块一些,速度太慢了!
      

  4.   

    能否把你的SQL写上去。看上去不太懂。本人虽是菜鸟,但也想学习学习。
      

  5.   

    给数据库加索引吧。用SQL或者ORACLE都好。
      

  6.   

    怎么不用存储过程或者触发器来处理,如果数据量太大,Access恐怕撑不住
      

  7.   

    加索引,查询用ADOquery,写入用ADOCommand
      

  8.   

    查询字段要sql server里建索引,我以前还建过1024个字段的数据表呢。7W多条记录,查询也很快的。
    sql 语句尽可能要在sql server里优化好了再copy 在delphi的代码里!
    Delphi里的ADOQuery1.Prepared:=true;设置为真执行效率高。
    有时间的话看看李唯写的叫 ado详解 时间太长了,有点记不清了,专门讲的ADO对象
      

  9.   

    ADO可以实现批量提交的功能,比如你增加1000记录才向数据库提交一次,这样应该会快很多
      

  10.   

    你可以考虑,在内存中建两个ADO数据集。然后从把数据库的A、B两表读到内存中,然后的一切比较操作就在内存中处理。处理完了以后,再一次性写入数据库。