mysql - 单独的 MySQL INSERT 语句与先写入本地 CSV 然后加载数据

标签 mysql performance csv

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

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

如果我已经在 CSV 中包含信息,我知道 LOAD DATA INFILE 比单独的 INSERT 语句要快得多。但是,如果我没有 CSV 中已有的信息,我不知道先创建 CSV 是否会更快。

问题的关键是:写入本地 CSV 是否比单个 INSERT 语句更快或大约相同?

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

最佳答案

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

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

INSERT statements that use VALUES syntax can insert multiple rows. To do this, include multiple lists of column values, each enclosed within parentheses and separated by commas. Example:

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

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

关于mysql - 单独的 MySQL INSERT 语句与先写入本地 CSV 然后加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40698926/

相关文章:

python - 如何创建一个字符串矩阵作为行列并在 python 中存储 CSV 中的计数?

java - 使用不正确的字符集打开 CSV Java 生成的文件

带有两个文件夹的PHP页面登录

MySQL删除具有相同列值的重复行

javascript - 如何将 rel ="preload"用作 ="style"或 ="script"或提高页面速度的更好方法

performance - Google.com 和其他流量大的网站能否使用 Google 的 PSI API 获得 "fast"排名?

mysql - 如何在避免重复外键的同时更新 MySQL 自然键?

php - 如何使 Web 应用程序在线和离线工作

performance - 在 Windows 上选择 Google API(API 级别 17 或任何其他 API 级别)时,Android 模拟器不会加载

python - 直接从 request.get().content 的结果创建 pandas DataFrame