2013-12-09 54 views
0

有些信息可能有所幫助: 我有一個MySQL數據庫,用於保存有關學生(名,姓,電子郵件等)的詳細聯繫信息。檢查MySQL中是否存在成千上萬條記錄

每隔一段時間我會收到一個帶有更新聯繫人詳細信息的csv文件。

由於某些政策,不太可能改變的唯一信息是電子郵件地址,因此MySQL和csv文件將具有共同的電子郵件地址(除非我們有新條目)。

我需要的是: 我需要做的是找到一種方法來檢查csv文件(5000條記錄)中的電子郵件地址是否存在於MySQL數據庫(200000條記錄)中。

我寫了一個小的python程序,但它需要很長時間,因爲它必須對每個電子郵件地址執行sql查詢(這意味着在200000條記錄中有5000個查詢)。有時,連接因失去執行的很長一段時間..

實際問題:

我應該如何以避免長時間和提高性能查詢數據庫?

感謝

回答

0

我會建議:

  • 在你的MySQL服務器上的表大容量裝載電子郵件CSV(需要文件權限)
  • 電子郵件CSV表&現有之間執行LEFT JOIN請求DB來檢查哪個郵件存在與否。
0

你可以用下面的步驟和SQL

例如

表1:建議使用@dweeves的csv數據表。

表2:你的mysql表

匹配

SELECT table1.email FROM table1 INNER JOIN table2 ON table1.email = table2.email 

無法比擬的:

SELECT table1.email FROM table1 LEFT JOIN table2 ON table1.email = table2.email 

WHERE table2.email IS NULL 
0

可以讀取所有CSV數據轉換成列表,並打開一個MySQL的讀者。 將列表與mysql中的數據進行比較。

或者,如果您不想將其存儲在列表中,則需要逐行讀取它,並在讀取文件時將其與mysql進行比較。