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