方法1:select data from 数据1 a,数据2 b
where a.data=b.data
方法2:
select data from 数据1 a where exists (select 'x' from 数据2 b where a.data=b.data);

解决方案 »

  1.   

    to lint(越来越懒)你没看数据量吧! 50亿条啊
    sql server 能承受住吗??
      

  2.   

    用oracle,建索引,只需建数据2的就可以。
    我在电信,最大只做过40GB的表,但机器一定要强,内存要大。
      

  3.   

    数据1           数据2     得出数据
    12                8            2
    2                 2            3
    3                 5            5
    4                 3            .
    5                 7            .
    .                 .            .
    .                 .            .
    .                 .
    .                 .
    等有很多啊超过 50亿条
    数据1 和 数据2 里都是些  数字id  大到不大, 但是 50亿条倒是很多我需要的是,先不考虑机器,  按什么方式,能对比的快一些!非得用for吗?难道没有 按某种 方式排列  然后  好对比
      

  4.   

    你的数据是否是有大小限制的,比如在一个比50亿小很多的一个范围内,那你可以依据数据1构造一个标示某个数字特征的数据是否存在的散列数组,假设你的数字是0到X的整数,你就可以构造一个只有一位的包含50,000元素的整数,设置为bit1[X+1]={0},然后来对数据1进行处理,即遍历一次数据1,根据数据1的值设置对应的bit1[x]=1,如果空间允许,对数据2也同样处理产生bit2[],然后循环输出得出数据ret数组
       j=0;max=X+1;
       for (i=0;i<max;i++)
          {  
           if (bit1[i]&bit2[i]) 
                {
                   ret[j]=i;
                   j++;
                 }
           }
      

  5.   

    用排列的方法不行吗?? 这样可能比用for判断的速度要快上好几倍!谁还有,gogogogo
      

  6.   

    排列中也要用到大量的for操作啊,而且排列有很多种算法,而你的问题不需要进行全排列的,所以我介绍的方法在X不大的情况下是一个很好的算法,它的时间复杂度是固定值。
      

  7.   

    to :  mrshelly(Shelly) 在看一下有没有,没就不用提出来了
      

  8.   

    分组就OK了。为什么要一次性提取这么多记录??如果是 mysql 用 Limit n,m 就可以分组提出来了。内存占用应该不是很大~~
      

  9.   

    我提的算法也可以对X分组处理,不过时间就会成倍增加,但要求的空间会减少
    此外还有一些优化方法,比如在bit1[x]=1设置计算中添加判断和一个计数器M,
    M=0;
    ....   
    do
     { 
     if (!bit1[x]) 
             {M++;
              bit1[x]=1;
              if (M==X+1)//所有的可能已经满了
                  ...;//退出检测新数据操作
              }
      }while(还有新数据)
      

  10.   

    其实也蛮简单的。可以使用打洞法。
    在一张足够大,建过索引的表里做标记。
    第一次浏览到此数据为1,第二次为2。
    然后根据此标记取出,Over
      

  11.   

    不太明白数据的含义,不过既然数据这么多可以考虑建立多个临时表将数据按一种方式分开处理。如果是在web上执行可以执行完一张表刷新或者重新加载(带参)避免页面超时。虽然方法很笨,而且执行的时间可能会很长,但是至少不会死掉!
      

  12.   

    1。sql 语句直接处理。
    2。显示得时候,分页显示(惰性装载。要不就用dll在分析)
      

  13.   

    数据1           数据2     得出数据
    12                8            2
    2                 2            3
    3                 5            5
    4                 3            .
    5                 7            .
    .                 .            .
    .                 .            .
    .                 .
    .                 .
    数据1 和 数据2 可以看做是一个单独的文本文件
    而   得出的数据就是 数据1中和数据2中都有的数字,并非是每行所对照的结果啊.
    如果问题简单了,我就不会麻烦各位高手了!
    to iamceo(CEO) "为何会有50亿的数据量?"  因为数据多所以就有啊!
    问题不难你能解决吗?  我很急等用啊
      

  14.   

    我确实有急用,啊!
    没难度发到csdn来有点屈才了!
      

  15.   

    建索引
    用 lint(越来越懒) 老兄的方法应该就差不多了
    或者分段查了,一部分一部分的,比如第一次查大于100的,第二次查大于200的
    查出来的数据放到一个临时表中再排序。
      

  16.   

    我怎么发现CSDN这里怎么没有什么人能够解决这种问题?
      

  17.   

    我做过分析PI的10M位,从中挑出不重复的给定数位的数字并排序电脑是P2.4C+1G内存,采用Delphi5,好像是十分钟左右的时候那么,50亿相当与5000M,简单的比较一下,相当与500*10*2=1万分钟,也就一个星期
    问题只在于,这50亿的数据已什么形式存在?
      

  18.   

    如果是文本文件的 那很简单 用c或者c++写文件指针,慢慢处理,别说50亿了5000亿都可以搞定,看时间了,50亿也不必要花多久的,循环很快的,如果闲c慢,你写个 简单的汇编也好啊
      

  19.   

    to patchclass(黑翼) 可以写成文本文件的结构,那样处理估计时间是多少???按50亿来说
      

  20.   

    up去数据库版问。P.S 其实你没必要考虑50亿条数据都在一个库里的问题。从策略上来讲,任何访问都是阶段性的或者是有限制的。不会把所有数据,现行的也好,历史的也好,放到一起供用户查询的。