如何提速MySQL中外部价格数据至内部表的导入过程?
优化MySQL数据导入速度的最优方案
你原来的方案里,UPDATE操作慢的核心原因是逐行执行子查询——哪怕字段加了索引,大数据量下每条记录都要分别查两次关联表,累积起来的IO和查询开销会非常大。
最快的导入方式是直接在INSERT阶段通过JOIN关联获取对应的ID,一步到位完成数据插入,完全不需要新增临时字段和后续的UPDATE操作:
INSERT INTO internal.prices (articleID, regionID, price) SELECT a.id AS articleID, r.id AS regionID, ep.price FROM external.prices ep JOIN internal.articles a ON ep.articleNumber = a.articleNumber JOIN internal.regions r ON ep.regionNumber = r.regionNumber;
额外优化建议(大数据量导入时生效)
- 关闭自动提交:执行
SET autocommit = 0;,导入完成后再执行COMMIT; - 禁用外键检查:
SET foreign_key_checks = 0;,导入后恢复为1 - 禁用唯一键检查:
SET unique_checks = 0;,导入后恢复为1 - 调整InnoDB缓冲池大小:如果服务器内存充足,临时调大
innodb_buffer_pool_size,让更多数据在内存中处理
这样操作的话,整个导入过程只需要一次批量关联查询+插入,效率比先插后更新提升几个数量级。
内容的提问来源于stack exchange,提问作者mpu
相关产品推荐
相关产品推荐

