我正在使用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导入看来,我正在添加其他步骤。
答案 0 :(得分:2)
MySQL的直接CSV导入通常是最快的选项,但并非没有限制。一种是您需要导入文件中的全部或全部内容,直到完成,您才能知道文件的长度。由于某些进口可能需要数小时甚至数天,因此您可能不知道它在哪里。出于性能原因,对InnoDB表的整个插入操作都是自动进行的,但这意味着直到完全提交后,它才可见。
另一个是该文件必须存在于服务器上。 LOCAL
选项是mysql
命令行工具的一个古怪功能,除非经过仿真,否则可能无法在您的数据库驱动程序中使用。
使用CSV解析器逐行插入几乎总是比较慢。如果您必须做某事,请确保一次准备一次INSERT
语句并在循环中重新使用它,或者执行“ multi-INSERT
”,其中包含尽可能多的行最大语句大小缓冲区。