2014-10-10 35 views
0

比较数据欲两个表(DATA1 & DATA2)作为请求之间的数据进行比较:从两个表

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

但是每个表都这么大,DATA1 => 25百万,DATA2 => 38数以百万计的元组。 所以这个要求是很棒的小桌子,但sooo像我这样的biger ...

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

感谢您的帮助

回答

2

请注意,您会重复计算电子邮件。如果一封电子邮件在data2中的100条记录中,而不是在data1中,那么您将计数为100,而不是1.

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

要计算每个电子邮件只需要一次COUNT(distinct email)。但是IN条款通常很慢,正如其他人已经提到的那样。你可以简单地做所以(只要你想避免反复计数):

select email from data2 
except 
select email from data1; 
+0

非常感谢托尔斯滕!我确认,EXCEPT比NOT IN更快! :○ – Macbernie 2014-10-10 14:23:04

0

你可以尝试以下方法: - 尝试使用内表1和2 之间的连接 - 尝试使用WHERE NOT EXISTS代替NOT IN - 尝试在创建索引两个表,这将加快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 
0
SELECT COUNT(email) 
FROM data2 
WHERE not exists 
(select 1 
from data 
where data2.email = data.email)