所以我试图导入一些销售数据到我的MySQL数据库。这些数据最初是以原始CSV文件的形式存在的,我的PHP应用程序需要先处理这些数据,然后将处理后的销售数据保存到数据库中。导入批量数据到MySQL
最初我在做个别的INSERT
查询,我意识到这是非常低效的(约6000个查询几乎要花费2分钟)。然后我生成了一个大的查询,并一次性编辑了所有的数据。这给我们提高了3400%的效率,并将查询时间减少到刚好超过3秒。
但据我所知,LOAD DATA INFILE
应该比任何种类的INSERT
查询更快。所以现在我正在考虑将处理后的数据写入文本文件并使用LOAD DATA INFILE
将其导入数据库。这是将大量数据插入数据库的最佳方式吗?或者我是否完全用错误的方式来解决这个问题?
我知道数以千计的大部分数字数据在事物的宏观方案中并不是很多,但我试图让这个Intranet应用程序尽可能快速/快速响应。而且我还想确保在我们决定将该计划授权给其他公司的情况下,此流程可以扩大规模。
UPDATE:
所以我没有继续前进,测试LOAD DATA INFILE
出的建议,认为它会给我只边际速度增加(因为我现在正在写相同数据到磁盘的两倍),但我是当它将查询时间从3300ms降低到〜240ms时感到惊讶。该页面仍然需要大约1500毫秒才能执行总计,但仍然比以前明显更好。
从这里我猜我会检查数据库中是否有多余的索引,并且由于除了两个表格都是InnoDB,我会研究优化InnoDB缓冲池以优化整体性能。
我知道这个问题是在几年前发布的,但我不得不说,一个批量INSERT和LOAD DATA INFILE之间的区别是节省时间。我使用INSERT从30秒/秒增加到10秒,使用30列CSV文件加载~11000行。 – 2013-11-19 15:56:10