代码之家  ›  专栏  ›  技术社区  ›  Bijan

PHP+MySQL:高效上传大型电子表格到MySQL

  •  0
  • Bijan  · 技术社区  · 7 年前

    我正在使用 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导入看起来像是在添加额外的步骤。

    1 回复  |  直到 7 年前
        1
  •  2
  •   tadman    7 年前

    MySQL的直接CSV导入通常是最快的选择,但是它并不是没有限制的。一种是你需要导入文件中的所有内容或者什么都不导入,直到导入完成,你才知道它到底有多远。由于一些进口可能需要数小时,甚至数天,你可能不知道它在哪里。由于性能原因,InnoDB表上的整个insert操作以原子方式进行,但这意味着在完全提交之前,它是不可见的。

    另一个是文件必须存在于服务器上。这个 LOCAL 选择权是一个古怪的特点 mysql

    用CSV解析器逐行插入几乎总是比较慢。如果你必须做一件事,一定要准备一份工作 INSERT 语句,并在循环中重复使用它,或执行“multi- 插入 “在最大语句大小缓冲区中容纳尽可能多的行。

    推荐文章