可以说我有2个大型的csv文件(超过一百万行),并且都是具有等级的名称列表。目标是在两个列表中找到相同的名称,列表1的唯一名称,列表2的唯一名称。

我想使用的是mySQL,因此我为每个列表创建了一个表,但是循环遍历一百万次的一百万条记录似乎是一种较差的方法,而且非常慢。你会怎么做?

这是一个示例,但查询错误:http://sqlfiddle.com/#!2/9f272/2

最佳答案

以下返回名称在每个表中出现的次数以及计数。如果每个表中的名称都是唯一的,则它可能返回如下内容:

InTable1   InTable2    Count
1          0           xxx
0          1           yyy
1          1           zzz


该查询使用和union all

select InTable1, InTable2, count(*), min(name), max(name)
from (select name, sum(which = 1) as InTable1, sum(which = 2) as InTable2
      from ((select name, 1 as which
             from table1
            ) union all
            (select name, 2 as which
             from table2
            )
           ) t
      group by name
     ) t
group by InTable1, InTable2;


编辑:

您需要创建索引。语法如下:

create index table1_name on table1(name);
create index table2_name on table2(name);

关于mysql - 比较mysql中的两个大数据集或表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18786211/

10-11 03:27