我正在使用PHPSpreadsheet要获取用户可以上传的一些电子表格,添加具有特定值的列,将文件另存为 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 似乎我添加了额外的步骤。
最佳答案
MySQL 的直接 CSV 导入通常是最快的选项,但它并非没有限制。一是您需要导入文件中的全部内容或不导入任何内容,并且在完成之前您不会知道它已经进行了多远。由于某些导入可能需要数小时甚至数天的时间,因此您可能不知道它在哪里。出于性能原因,InnoDB 表上的整个插入操作以原子方式进行,但这意味着它在完全提交之前不可见。
另一个是该文件必须存在于服务器上。 LOCAL
选项是 mysql
命令行工具的一个奇怪功能,除非进行模拟,否则可能无法在数据库驱动程序中工作。
使用 CSV 解析器逐行插入几乎总是比较慢。如果您必须做某件事,请务必准备一次 INSERT
语句并在循环中重复使用它,或者对尽可能多的行执行“multi-INSERT
”因为您可以适应最大语句大小缓冲区。
关于PHP + MySQL : Upload large spreadsheet into MySQL efficiently,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53093041/