个性化的MySQL INSERT语句首先写入本地CSV,然后写入LOAD DATA

时间:2016-11-19 23:11:46

标签: mysql performance csv

我正在尝试将5000万个HTML文件中的信息提取到MySQL数据库中。我的问题是在这个过程中的哪个阶段我应该将信息存储到MySQL数据库中。例如,我正在考虑这些选项:

  1. 打开每个文件并提取我需要的信息。解析每个文件后执行INSERT。
  2. 打开每个文件并提取我需要的信息。将信息存储为CSV文件作为中介。将所有文件解析为CSV后,使用LOAD DATA INFILE
  3. 执行批量上传

    我知道如果我已经拥有CSV中的信息,LOAD DATA INFILE比单个INSERT语句快得多。但是,如果我没有CSV中的信息,我不知道首先创建CSV是否更快。

    问题的关键:写入本地CSV的速度是否比单个INSERT语句更快或更接近?

    我正在使用PHP以防万一。提前谢谢!

1 个答案:

答案 0 :(得分:0)

他们的关键是不要为每个条目插入一个,而是批处理内存中的条目然后执行批量插入。

请参阅:https://dev.mysql.com/doc/refman/5.7/en/insert.html

  

使用VALUES语法的INSERT语句可以插入多行。为此,请包含多个列值列表,每个列值都括在括号内并用逗号分隔。例如:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

像SQLAlchemy或Hibernate这样的ORM足够智能(取决于配置)来自动批量插入。