我有一个大型数据库,我正在尝试通过 perl 进行更新。要添加的信息来自我无法控制的 csv 文件(但它是受信任的——它来自我们公司的不同部分)。对于文件中的每条记录,我需要添加它(如果它不存在)或什么都不做(如果它存在)。添加记录包括通常的INSERT INTO
,但在此之前可以为特定条目运行,UPDATE
必须运行特定的。
为了具体起见,假设该文件有 10,000 个条目,但其中 90% 已经在数据库中。导入记录的最有效方法是什么?我可以看到一些明显的方法:
- 从数据库中提取此类型的所有记录,然后检查文件中的每个条目的成员资格。缺点:大量数据传输,可能足以使服务器超时。
- 从文件中读取条目,并仅针对带有
RLIKE 'foo|bar|baz|...'
查询(或stuff = 'foo' || stuff = 'bar' || ...
查询,但这似乎更糟)的那些记录发送查询。缺点:巨大的查询,可能足以阻塞服务器。 - 读入文件,为每个条目发送一个查询,然后在适当的时候添加它。缺点:数以万计的查询,非常慢。
除了UPDATE
要求之外,这似乎是一个相当标准的问题,大概有一个标准的解决方案。如果有,它可能可以通过适当使用auto_increment
主键测试来适应我的情况。