从两个表
问题描述:
比较数据欲两个表(DATA1 & DATA2)作为请求之间的数据进行比较:从两个表
SELECT COUNT(email) FROM data2 WHERE data2.email NOT IN (SELECT email FROM data1)
但是每个表都这么大,DATA1 => 25百万,DATA2 => 38数以百万计的元组。 所以这个要求是很棒的小桌子,但sooo像我这样的biger ...
是否有人知道另一种方式(更快)来比较两个表之间的数据?
感谢您的帮助
答
请注意,您会重复计算电子邮件。如果一封电子邮件在data2中的100条记录中,而不是在data1中,那么您将计数为100,而不是1.
要快速获取查询,您需要data1.email和data2.email上的索引。然后dbms实际上甚至不必访问表;它只能在索引上工作。
要计算每个电子邮件只需要一次COUNT(distinct email)
。但是IN条款通常很慢,正如其他人已经提到的那样。你可以简单地做所以(只要你想向避免反复计数):
select email from data2
except
select email from data1;
答
你可以尝试以下方法: - 尝试使用内表1和2 之间的连接 - 尝试使用WHERE NOT EXISTS代替NOT IN - 尝试在创建索引两个表,这将加快2列
的比较约翰
答
如果可以,把索引两个表的电子邮件列,然后尝试使用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
答
SELECT COUNT(email)
FROM data2
WHERE not exists
(select 1
from data
where data2.email = data.email)
非常感谢托尔斯滕!我确认,EXCEPT比NOT IN更快! :○ – Macbernie 2014-10-10 14:23:04