【发布时间】:2015-05-24 09:04:19
【问题描述】:
我正在以编程方式将行从 excel 文件导入数据库。 excel 文件有 10 列 * 30000 行。我已经在 php 数组中导入了这些数据,然后将其插入到数据库中。
上传文件后,将所有行插入数据库需要 7-8 分钟。我知道插入行的两种方法
第一种方法:
生成类似的动态查询,
INSERT INTO table_name (col1, col2,..) VALUES (row1, row1, ....), (row2, row2, ....), (row3, row3, ....), (row4, row4, ....), ...
并运行查询以插入所有行。
第二种方法:
$con->prepare("INSERT INTO table_name (col1, col2, ...) VALUES (:col1, :col2, ...)");
foreach ($rows as $row) { // Loop through all rows and insert them
$result->bindParam(':col1', $val1);
$result->bindParam(':col2', $val2);
$result->bindParam(':col3', $val3);
...
...
$result->execute();
}
第一种方法看起来混乱且效率低下,我使用的是第二种方法,但它每秒只插入 500-700 行,插入所有行总共需要 7-8 分钟。
还有哪些比这些更高效、更快的方法?
编辑:不建议将excel文件直接导入mysql。数据在插入数据库之前需要进行处理。
【问题讨论】:
-
转换为 CSV 然后使用
LOAD DATA INFILE。 -
请查看已编辑的问题。
-
你能把它包装成一个交易吗?
COMMITing 数据使用资源,如果您启用了自动提交,则必须为每个INSERT执行此操作 - 检查 this link - 您也必须在 PDO 中禁用自动提交 - check here - 不要如果您采用这种方法,请不要忘记在最后COMMIT您的数据(不过,对于您正在尝试做的事情,我绝对会推荐) -
谢谢。我会在代码中手动尝试
COMMIT。