我有一个 CSV 文件,我正在尝试将其加载到我的 mysql 数据库中。该文件大于 10MB,有超过 100,000 行。我需要一种有效的方法来检查数据库中是否已经存在一行,并添加新条目。它用于使用来自另一个第三方数据库的最新数据更新数据库。
逐行检查并逐行添加似乎确实效率低下。此外,如果有帮助,CSV 文件有一个日期字段。
首先,我将准备数据库表以具有索引和唯一键。
然后,我将逐行解析 CSV。如果重复,数据库将不接受该值,您的脚本将继续。
如果您的 CSV 没有唯一的字段,您可以根据该行的所有数据字段创建一个哈希并将其用作唯一键。您可以使用以下方式生成唯一密钥:
md5(field1 + ":" + field2 + ":" + ... + ":" + fieldN)
我可以想到 2 个简单的选项。查询 DB 1 次并将整个结果集存储在 id-keyed 数组中
$data[$queryResult['fieldID']] = $queryResult;
并使用它来快速验证每个字段。或者您可以使用 INSERT IGNORE (将忽略该字段已存在的警告并继续下一个)