PHP + MySQL : Upload large spreadsheet into MySQL efficiently

标签 php mysql phpspreadsheet

我正在使用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/

相关文章:

php - .load 到包含 PHP 内容的 DIV

php - 基于键、每个键一个元素从动态关联数组创建二进制配对数组

javascript - 在删除之前使用 JavaScript 进行提示不起作用

php - 用户个人资料页面的自定义 URL

laravel - Php电子表格: How to save the spreadsheet with a Laravel storage disk?

php - MySQL 数据库规范化(取自 Excel)

mysql - 如何使这个 MySql 查询适应 PervasiveSql?

java - 如何在Java程序中执行MySQL查询 "show tables;"..?

php - 是否可以使用 PhpSpreadSheet 在现有电子表格中写入?

php - Composer 要求 phpoffice/phpspreadsheet 不起作用