【发布时间】:2013-12-11 05:23:38
【问题描述】:
我有一个如下所示的 .txt 文件:
id,lat,lon,sequence,dist
98372,40.535257,-111.871612,1,0.0
98372,40.536023,-111.872235,2,0.1001
98372,40.535629,-111.872599,3,0.1335
98372,40.535499,-111.872559,4,0.1758
...etc
这个文件可以有 863650 行! (34MB)
我需要使用 MyISAM 引擎将每一行作为一行插入 MySQL 数据库中。 (我假设这将是最快的)
我在 GoDaddy 的服务器上托管,所以我对 apache 和 mysql 配置没有太多控制权。
这是我目前所拥有的,除了它需要大约 6 分钟以上并且服务器在 2 分钟后超时,因此它永远不会完成:
$raw = file_get_contents('file.txt');
$lines = explode("\r\n", $raw);
$tablename = 'tablename';
$tableHeaders = 'id,lat,lon,sequence,dist';
foreach($lines as $line) {
$line_values = explode(",", $line);
$sqlValues = "VALUES(";
foreach($line_values as $value) {
$sqlValues .= "'$value',";
}
$sqlValues = substr($sqlValues, 0, -1) . ")";
$sqlSyntax = "INSERT INTO $tablename ($tableHeaders) $sqlValues";
$mysqlcon->query($sqlSyntax);
}
这可以更好地优化吗?或者是否可以构建一个 GIANT 插入语句,如:
"INSERT INTO table (id,lat,lon,sequence,dist)
VALUES (98372,40.535257,-111.871612,1,0.0),
(98372,40.536023,-111.872235,2,0.1001),
(98372,40.535629,-111.872599,3,0.1335),
(98372,40.535499,-111.872559,4,0.1758),
...etc (863647 more lines)"
任何帮助将不胜感激!
【问题讨论】:
-
为什么不使用 INSERT Query 到 Foreach 循环中?
-
@Chandresh,你是什么意思?这就是我在问题中发布的第一个 foreach 示例中所做的吗?