vb一个数据对比功能,数据量比较大不知道用何方法实现效率高解决方案

vb一个数据对比功能,数据量比较大不知道用何方法实现效率高
数据库是access
其中有个一个表数据将近30W
主要对该表(表名XXXXX)的id字段进行对比,长度是11位的字符
id                                    name
11235452123              XXXXXXXX
11255452123              XXXXXXXX
11544452123              XXXXXXXX
11235454565              XXXXXXXX
11235654543              XXXXXXXX
11234563435              XXXXXXXX
11236543455              XXXXXXXX
11235333555              XXXXXXXX
11233556643              XXXXXXXX
11235543456              XXXXXXXX
11235654456              XXXXXXXX
11236544566              XXXXXXXX
11235456666              XXXXXXXX
.......
与之对比的文件为txt、excel文件里面也是将近20-30W数据,跟这个XXXXX表进行对比找出id相同的数据
我用的是for循环一行一行的进行比较,差点奔溃
不知道有没有更好的办法
数据量太大,几十万数据跟几十万数据碰撞找出与XXXXX表相同id的数据,而却id还是字符类型
循环对比可以直接pass掉太耗时间。

------解决方案--------------------
看了你的描述,感觉说的有点含糊。
就是如果“txt、excel文件里面的id,能够在数据库中的id号中找到,就把这一条数据提取出来”?
如果是这样,这儿还有一个问题:
  是提数据库中的那条,还是提取文件中的那条?
  因为你并没有说明白:id相同,name是否也相同?
要是数据库与文件中id相同对应的name也相同,那结果自然一样;
但要是name不一定相同,就牵涉到取文件中的,还是数据库中的问题了!

你的数据量比较大,我觉得还是先分别排序,再进行“对比”,速度可能快点。
以前跟蚜虫童鞋切磋了一下,“文本筛选除重”操作,
数据量少时,用“字典”对象比较快;
数据量多一些时(5W以上),排序筛选法就快得多了。

另外,你还得说一下文件数据格式,id和name如何“提取”出来。
------解决方案--------------------
将 txt 或Excel 文件当作外部数据库来访问,例如:

SELECT id FROM [$Sheet1] WHERE id IN (SELECT id FROM XXXXX IN "c:\test\myfile.mdb")
------解决方案--------------------
仅供参考。尽管不是VB6
//输出PROG中有但LIST中没有的文本行,即集合PROG-LIST
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <search.h>
#define MAXCHARS 512
int MAXLINES=10000,MAXLINES2;
char *buf,*buf2;
char PROG[256]="PROG";//程序Program需要的文件列表
char LIST[256]="LIST";//dir /b /s生成的实际文件列表List
FILE *fp,*fl;
int i,c,n,L,hh;
int ignore_case=0;
char ln[MAXCHARS];
int icompare(const void *arg1,const void *arg2) {
   return stricmp((char *)arg1,(char *)arg2);
}
int compare(const void *arg1,const void *arg2) {
   return strcmp((char *)arg1,(char *)arg2);
}
int main(int argc,char **argv) {
    if (argc>1) strcpy(PROG,argv[1]);//命令行参数1覆盖PROG
    if (argc>2) strcpy(LIST,argv[2]);//命令行参数2覆盖LIST
    if (argc>3) ignore_case=1;//若存在命令行参数3,忽略大小写
    if ((fl=fopen(LIST,"rt"))==NULL) {
        fprintf(stderr,"Can not open %s\n",LIST);
        fprintf(stderr,"Usage: %s [PROG] [LIST] [-i]\n",argv[0]);
        return 1;
    }
    if ((fp=fopen(PROG,"rt"))==NULL) {
        fclose(fl);
        fprintf(stderr,"Can not open %s\n",PROG);
        fprintf(stderr,"Usage: %s [PROG] [LIST] [-i]\n",argv[0]);
        return 2;
    }
    buf=(char *)malloc(MAXLINES*MAXCHARS);
    if (NULL==buf) {
        fclose(fl);
        fclose(fp);
        fprintf(stderr,"Can not malloc(%d LINES*%d CHARS)!\n",MAXLINES,MAXCHARS);
        return 4;
    }
    n=0;
    hh=0;
    i=0;
    while (1) {
        if (fgets(ln,MAXCHARS,fl)==NULL) break;//
        hh++;
        L=strlen(ln)-1;
        if ('\n'!=ln[L]) {//超长行忽略后面内容
            fprintf(stderr,"%s Line %d too long(>%d),spilth ignored.\n",LIST,hh,MAXCHARS);
            while (1) {