select * from table_a  a where a.num in (select b.num from table_b b);
表a与表b在两个不同的数据库中,如果要使用上面的语句必须通过dblink建立两个数据库的连接,但现在不能用dblink,我的方法是先将a,b两个表的数据分别从其各自的数据库中查出写入到文本中,再用java程序作比较对两具文本的数据比较,但数据量太大(200万以上),请问大家有什么好的方法。 

解决方案 »

  1.   

    比较的只是num值 取出来放文件中还是要读文件 为什么不在A库中每次取1000个num 然后交给另一个进程去检查B库中是否有对应的num存在呢
      

  2.   

    如果你只用b表的num对象,而不用其他对象,那么200万数据一起放入HashMap,占用的数据量也并不大。
    如果实在是你的机器不行,那么可以这样做。A表 以 a.num排序输出到文件。 B表以 B.num排序,取出b.num到文件。1 取 10000 条b表文件 放入hashmap
    2 循环A表文件,获取数据。
     2.1 再HashMap中定位该数据。
     2.2 若定位失败。 
       2.2.1 若 a.num>b.num(最大值)
         2.2.1.1 取b表数据,取出 b.num >=a.num 的10000条数据 放入hashMap.  重新回到2.1
       2.2.2 重新回到2 的循环