比较两个表中的数据

时间:2014-10-10 13:16:45

标签: sql linux postgresql debian

我想比较两个表(data1& data2)之间的数据作为请求:

SELECT COUNT(email) FROM data2 WHERE data2.email NOT IN (SELECT email FROM data1)

但每张桌子都很大,data1 => 25百万,data2 => 3800万元组。 所以这个请求对于小桌子来说太棒了,但对于像我这样的biger来说太长了......

是否有人知道另一种方式(更快)来比较两个表之间的数据?

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

请注意您反复计算电子邮件。如果电子邮件在data2中而不在data1中的100条记录中,那么您将计算100而不是1。

要快速获取查询,您需要data1.email和data2.email上的索引。然后dbms实际上甚至不必访问表;它只能用于索引。

只需按COUNT(distinct email)一次计算每封电子邮件。但IN子句通常很慢,正如其他人已经提到的那样。你可以简单地这样做(假设你想要以避免重复计算):

select email from data2
except
select email from data1;

答案 1 :(得分:0)

您可以尝试以下方法: - 尝试在表1和表2之间使用内部联接 - 尝试使用WHERE NOT EXISTS而不是NOT IN - 尝试在两个表的电子邮件列上创建索引,这将加快2列的比较

约翰

答案 2 :(得分:0)

如果可以的话,在两个表格上放置索引'电子邮件列,然后尝试使用OUTER JOIN查找不匹配的条目 - 这通常比NOT IN提供快速结果:

SELECT COUNT(*)
FROM
                @Data1  AS Data1
LEFT OUTER JOIN @Data2  AS Data2 on Data1.Email = Data2.Email
WHERE
    Data2.Email IS NULL

答案 3 :(得分:0)

SELECT COUNT(email) 
FROM data2 
WHERE not exists 
(select 1 
from data
where data2.email = data.email)