比較數據欲兩個表(DATA1 & DATA2)作爲請求之間的數據進行比較:從兩個表
SELECT COUNT(email) FROM data2 WHERE data2.email NOT IN (SELECT email FROM data1)
但是每個表都這麼大,DATA1 => 25百萬,DATA2 => 38數以百萬計的元組。 所以這個要求是很棒的小桌子,但sooo像我這樣的biger ...
是否有人知道另一種方式(更快)來比較兩個表之間的數據?
感謝您的幫助
比較數據欲兩個表(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