优化大规模MySQL INSERT

1 php mysql sql bulkinsert

我有一个需要运行每日脚本的应用程序; 每日脚本包括下载包含1,000,000行的CSV文件,并将这些行插入表中.

我在Dreamhost中托管我的应用程序.我创建了一个遍历所有CSV行的while循环,并为每个行执行INSERT查询.问题是我得到了"500内部服务器错误".即使我将其分成1000个文件,每个1000行,我也不能在同一个循环中插入超过40或5万行.

有什么办法可以优化输入吗?我也在考虑使用专用服务器; 你怎么看?

谢谢!

佩德罗

OMG*_*ies 13

大多数数据库都有一个优化的批量插入过程--MySQL是LOAD DATA FILE语法.

要加载CSV文件,请使用:

LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

  • 如果你不能将数据文件上传到数据库服务器主机,那么使用`LOAD DATA LOCAL INFILE ...`然后你可以将数据文件上传到MySQL连接的客户端,在这种情况下是PHP应用程序主办. (3认同)

nos*_*nos 6

插入多个值,而不是执行

insert into table values(1,2);
Run Code Online (Sandbox Code Playgroud)

insert into table values (1,2),(2,3),(4,5);
Run Code Online (Sandbox Code Playgroud)

一次最多适当的行数.

或者进行批量导入,这是加载数据的最有效方式,请参阅

http://dev.mysql.com/doc/refman/5.0/en/load-data.html