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