【发布时间】:2011-03-07 00:33:31
【问题描述】:
所以我正在尝试将一些销售数据导入我的 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 缓冲池以优化整体性能。
【问题讨论】:
-
我确实知道这个问题是很久以前发布的,但我不得不说一个批量 INSERT 和 LOAD DATA INFILE 之间的区别在于节省的时间。我从使用 INSERT 的 30 秒 / 更多时间到大约 10 秒加载具有 30 列 CSV 文件的 ~11000 行。
标签: php mysql performance bulkinsert