php - 将批量数据导入MySQL

标签 php mysql performance bulkinsert

因此,我正在尝试将一些销售数据导入到我的 MySQL 数据库中。数据最初是原始 CSV 文件的形式,我的 PHP 应用程序需要先对其进行处理,然后将处理后的销售数据保存到数据库中。

最初,我正在执行单独的 INSERT 查询,我意识到这是非常低效的(约 6000 个查询花费将近 2 分钟)。然后,我生成了一个大型查询并一次性INSERTed 数据。这使我们的效率提高了 3400%,并将查询时间缩短到刚刚超过 3 秒

但据我所知,LOAD DATA INFILE 应该比任何类型的 INSERT 查询都要快。所以现在我正在考虑将处理后的数据写入文本文件并使用 LOAD DATA INFILE 将其导入数据库。这是将大量数据插入数据库的最佳方式吗?还是我的做法完全错误?

我知道几千行主要是数字数据在宏伟的计划中并不多,但我正在努力使这个 Intranet 应用程序尽可能快速/响应迅速。我还想确保在我们决定将该程序许可给其他公司时扩大此过程。

更新:

所以我确实按照建议继续测试LOAD DATA INFILE,认为它可能只会给我带来边际速度提升(因为我现在将相同的数据写入磁盘两次),但我是当它将查询时间从超过 3300 毫秒减少到 ~240 毫秒时感到惊讶。该页面仍然需要约 1500 毫秒来执行总计,但它仍然比以前明显更好。

从这里开始,我想我会检查数据库中是否有任何多余的索引,而且,由于我的表中只有两个是 InnoDB,因此我将研究优化 InnoDB 缓冲池以优化整体性能。

最佳答案

LOAD DATA INFILE 速度非常快,是将文本文件导入 MySQL 的正确方法。它是加速数据插入速度的推荐方法之一 - 最多快 20 倍,据称:

https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html

假设将处理后的数据写回文本文件比将其插入数据库更快,那么这是一个很好的方法。

关于php - 将批量数据导入MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3096785/

相关文章:

sql - 验证列是否为空值

php - php 中的 PDOException “could not find driver”

MYSQL条件更新表

MySQL REGEXP 语句不应该返回 true?

performance - 负载均衡获得的吞吐量是多少

ios - Xcode 7 编辑时非常卡顿

javascript - 检测 AJAX 请求 $_SERVER ['HTTP_X_REQUESTED_WITH' ] 未定义

php - php中的表类

php - 警告为foreach()提供了无效的参数

Amazon Cloud 上的 MySql 复制故障转移