批量insert比单条insert快5–20倍,推荐用insert into ... values (...),(...),(...)方式,结合事务(每1000–5000行提交)和pdo预处理;load data infile最快但限制多,仅适用于本地csv导入。

单条 INSERT 与批量 INSERT 的性能差距明显
执行 1000 条记录插入时,逐条 INSERT INTO ... VALUES (...) 通常耗时是批量插入的 5–20 倍,主要开销在 MySQL 网络往返、语句解析、事务日志刷盘和索引维护上。批量插入将多行数据合并进一条 SQL,显著减少客户端与服务端交互次数,也降低锁竞争和日志写入频率。
推荐用 INSERT INTO ... VALUES (...), (...), (...) 方式
这是 PHP 中最简单高效的批量插入方式,无需额外扩展或配置:
- 每批次控制在 500–2000 行之间(取决于单行数据大小和 max_allowed_packet 设置)
- 拼接 SQL 时注意转义字段值,优先使用 PDO 的
prepare()+execute()绑定参数,避免 SQL 注入 - 示例:一次插入 3 行可写为
INSERT INTO users (name, email) VALUES (?, ?), (?, ?), (?, ?),然后传入 6 个参数
事务包裹能进一步提升吞吐量
默认情况下,每条 INSERT 都是独立事务(autocommit=1),频繁提交会拖慢速度。显式开启事务后批量提交,可减少 redo log 刷盘和 binlog 同步次数:
云点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户随时随地简单、安全、可靠的备份客户信息。功能强大的报表统计使得用户大数据分析变的简单,
- 用
$pdo->beginTransaction()开启,$pdo->commit()提交 - 每 1000–5000 行提交一次,避免事务过大导致锁表或内存溢出
- 注意:大事务失败时回滚成本高,建议配合错误捕获与重试逻辑
LOAD DATA INFILE 在特定场景下最快但限制多
若数据已存在本地文件(如 CSV),且 PHP 进程有 MySQL 服务器文件系统访问权限,LOAD DATA INFILE 是最快的方案,速度常比批量 INSERT 快 5–10 倍:
立即学习“PHP免费学习笔记(深入)”;
- 需确保 MySQL 配置中
secure_file_priv允许读取目标路径 - PHP 中通过
PDO::exec("LOAD DATA INFILE '/path/data.csv' ...")执行 - 不适用于动态生成的数据,也无法做字段转换或业务校验,适合 ETL 或初始化导入










