2014-10-10 91 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)