Lès*_*sté 4 php mysql performance bulkinsert
所以我试图将一些销售数据导入我的 MySQL 数据库。数据最初是原始CSV文件的形式,我的PHP应用程序需要先处理它,然后将处理后的销售数据保存到数据库中。
最初我在做单独的INSERT查询,我意识到这是非常低效的(大约 6000 次查询需要将近2 分钟)。然后我生成了一个大型查询并INSERT一次性编辑了所有数据。这使我们的效率提高了 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
假设将处理后的数据写回文本文件比将其插入数据库更快,那么这是一个很好的方法。