MySQL 有一个名为的功能LOAD DATA INFILE
,它可以完全按照您正在尝试执行的操作。
从这个问题来看,目前尚不清楚您是否已经在使用它?但即使你是,听起来你可以改进你做这件事的方式。
像这样的 SQL 脚本可以为您工作:
LOAD DATA INFILE filename.csv
INTO table tablename
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(
field1,
field2,
field3,
@var1,
@var2,
etc
)
SET
field4 = @var1 / 100,
field5 = (SELECT id FROM table2 WHERE name=@var2 LIMIT 1),
etc
这是一个相当复杂的示例,展示了如何将 CSV 数据直接导入表中,并一次性将其操作为正确的格式。
这样做的好处是它实际上非常快。我们使用它每周导入 500,000 条记录文件,它比读取文件和写入数据库的 PHP 程序快几个数量级。我们确实从 PHP 程序运行它,但 PHP 不负责任何导入;MySQL 通过一个查询自己完成所有事情。
在我们的例子中,即使我们确实对导入数据进行了很多操作,我们仍然将其写入临时表,因为在它进入主表之前我们还有大约十几个进一步的处理步骤。但是在您的情况下,听起来这种方法可以使您完全不必使用临时表。
MySQL 手册页:http ://dev.mysql.com/doc/refman/5.1/en/load-data.html
至于下载图像,我不知道如何加快速度,除了关注哪些导入的记录已更新,并且只获取已更改记录的图像。但我猜这是否是一个可行的解决方案,那么您可能已经在这样做了。
不过,我希望 MySQL 的建议是有帮助的。