如何通过批量INSERT与LOAD DATA高效向MySQL大表导入百万条数据?

2026-04-30 21:170阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1013个文字,预计阅读时间需要5分钟。

如何通过批量INSERT与LOAD DATA高效向MySQL大表导入百万条数据?

能,但必须分批,不能一股脑儿塞入一整条百万元的语句。MySQL的`max_allowed_packet`默认通常只有4MB,一行数据按50%字节数计算,10万行就接近5MB,超限直接报错:

关键点:

  • 必须显式开启事务:BEGIN; + 多条 INSERT + COMMIT;,否则每条语句都自动提交,性能断崖下跌
  • 避免在插入过程中有二级索引或外键约束,它们会逐行校验,拖慢速度;可考虑先删索引,插完再建
  • INSERT IGNOREON DUPLICATE KEY UPDATE 会额外增加唯一性检查开销,非必要不用

LOAD DATA INFILE为什么比INSERT快十倍以上?

因为它绕过了 SQL 解析、权限校验、日志格式转换等客户端-服务端交互环节,数据文件由 MySQL 服务端直接读取并写入存储引擎,相当于“裸数据灌入”。实测百万行 CSV 插入,LOAD DATA INFILE 常在 5–10 秒内完成,而等量 INSERT 即使分批也常需 60 秒以上。

阅读全文
标签:Mysql

本文共计1013个文字,预计阅读时间需要5分钟。

如何通过批量INSERT与LOAD DATA高效向MySQL大表导入百万条数据?

能,但必须分批,不能一股脑儿塞入一整条百万元的语句。MySQL的`max_allowed_packet`默认通常只有4MB,一行数据按50%字节数计算,10万行就接近5MB,超限直接报错:

关键点:

  • 必须显式开启事务:BEGIN; + 多条 INSERT + COMMIT;,否则每条语句都自动提交,性能断崖下跌
  • 避免在插入过程中有二级索引或外键约束,它们会逐行校验,拖慢速度;可考虑先删索引,插完再建
  • INSERT IGNOREON DUPLICATE KEY UPDATE 会额外增加唯一性检查开销,非必要不用

LOAD DATA INFILE为什么比INSERT快十倍以上?

因为它绕过了 SQL 解析、权限校验、日志格式转换等客户端-服务端交互环节,数据文件由 MySQL 服务端直接读取并写入存储引擎,相当于“裸数据灌入”。实测百万行 CSV 插入,LOAD DATA INFILE 常在 5–10 秒内完成,而等量 INSERT 即使分批也常需 60 秒以上。

阅读全文
标签:Mysql