我有一個CSV文件,我想加載到我的MySQL數據庫。該文件大於10MB,並且有超過100,000行。我需要一個有效的方法來檢查一行是否已經在數據庫中,並添加新的條目。它用來自另一個第三方數據庫的最新數據更新數據庫。從CSV文件讀取並添加到數據庫,排除重複
看起來確實效率低下,逐行檢查並逐行添加。 另外,如果有幫助,CSV文件有一個日期字段。
我有一個CSV文件,我想加載到我的MySQL數據庫。該文件大於10MB,並且有超過100,000行。我需要一個有效的方法來檢查一行是否已經在數據庫中,並添加新的條目。它用來自另一個第三方數據庫的最新數據更新數據庫。從CSV文件讀取並添加到數據庫,排除重複
看起來確實效率低下,逐行檢查並逐行添加。 另外,如果有幫助,CSV文件有一個日期字段。
首先,我會準備數據庫表,使其具有索引和唯一鍵。
然後,我會逐行解析CSV。如果重複,數據庫將不會接受該值,並且腳本將繼續。
如果您的CSV沒有唯一的字段,那麼您可以根據該行的所有數據字段創建一個散列並將其用作唯一鍵。 您可以使用類似產生一個唯一的密鑰:
md5(field1 + ":" + field2 + ":" + ... + ":" + fieldN)
我能想到的2種簡單的選擇。 查詢的DB 1時間和存儲的ID鍵控陣列
$data[$queryResult['fieldID']] = $queryResult;
在整個結果集,並使用該快速驗證每個字段。 或者您可以使用INSERT IGNORE(將忽略該字段已存在並繼續下一個的警告)
數據是否具有唯一ID或可以用作唯一標識符的東西? – 2013-02-22 18:15:09
它總是有一個IIN(庫存號) – 2013-02-22 18:15:55
如果IIN是一個鍵,您可以使用'ON DUPLICATE KEY UPDATE IIN = IIN'http://dev.mysql.com/doc/refman/5.0/en/insert-on- duplicate.html – AmazingDreams 2013-02-22 18:16:27