php+mysql:高效上传大型电子表格到mysql

50few1ms  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(295)

我使用phpspredsheet获取用户可以上载的一些电子表格,添加具有特定值的列,将文件另存为csv,并使用以下查询导入csv文件:

LOAD DATA LOCAL INFILE '{$file}'
INTO TABLE {$table}
FIELDS TERMINATED by ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES

或者我可以做一些类似的事情:

foreach($rows as $row){
    // INSERT $row INTO table
}

电子表格都将具有相同的列/数据类型。
最有效的方法是什么?从xlsx->csv->mysql import开始,我似乎在添加额外的步骤。

23c0lvtd

23c0lvtd1#

mysql的直接csv导入通常是最快的选择,但是它并不是没有限制的。一种是你需要导入文件中的所有内容或者什么都不导入,直到导入完成,你才知道它到底有多远。由于一些进口可能需要数小时,甚至数天,你可能不知道它在哪里。由于性能原因,innodb表上的整个insert操作以原子方式进行,但这意味着在完全提交之前,它是不可见的。
另一个是文件必须存在于服务器上。这个 LOCAL 选择权是一个古怪的特点 mysql 命令行工具,除非进行仿真,否则可能无法在数据库驱动程序中工作。
用csv解析器逐行插入几乎总是比较慢。如果你必须做一件事,一定要准备一份工作 INSERT 语句,并在循环中重复使用它,或执行“multi- INSERT “在最大语句大小缓冲区中容纳尽可能多的行。

相关问题