“每批记录数”在「工具 → 选项 → 导入 → 每批记录数」中设置,仅影响后续「运行SQL文件」导入时的分片大小,不改变导出SQL内容;真正提升导出效率的是「数据传输」功能中勾选「使用扩展插入语句」。
导出时“每批记录数”在哪设?
这个参数不在「转储sql文件」里,而是在「工具 → 选项 → 导入 → 每批记录数」中设置。它只影响后续使用「运行sql文件」导入时的分片行为,和导出阶段本身无关——也就是说,你导出的 sql 文件内容不会因这个值改变,但它决定了 navicat 导入时一次发多少条语句给 mysql。
为什么改这个值能加快导入?
默认值通常是 100 或 1000,太小会导致:频繁切片、多次网络往返、重复解析 INSERT 语句、每批都触发日志刷盘。调大后能摊薄这些固定开销。
-
每批记录数设为 50000 是实测较稳的上限,再高容易触发客户端内存溢出(尤其含长文本字段) - 该值对
CREATE TABLE、ALTER等 DDL 语句无效,它们始终逐条执行 - 如果目标表有外键或唯一索引,建议导入前加
SET FOREIGN_KEY_CHECKS = 0;和SET UNIQUE_CHECKS = 0;,导入完再恢复
导出时真正影响批量性能的关键开关
导出阶段想生成高效 SQL,重点不是“每批记录数”,而是选对插入格式:
- 用「数据传输」功能(
工具 → 数据传输),勾选「使用扩展插入语句」——这才是生成INSERT INTO t VALUES (…), (…), (…);的关键 - 「转储SQL文件」不提供该选项,它默认只输出单条
INSERT,即使你调大了「每批记录数」也无济于事 - 导出字符集必须显式设为
utf8mb4,否则中文可能变问号;AUTO_INCREMENT 值要勾选「导出 AUTO_INCREMENT 值」才能保留原 ID
容易被忽略的兼容性陷阱
「扩展插入语句」虽快,但 MySQL 5.6 以下版本不支持多值 VALUES 写法。如果你的目标库版本老旧,强行使用会报错:ERROR 1064 (42000)。
- 检查版本:运行
SELECT VERSION(); - 安全起见,可在导出后手动把长批量语句拆成每 1000 行一组,用文本编辑器正则替换:把
),\n(替换为);\nINSERT INTO table VALUES ( - Navicat 自身不提供“自动降级”功能,这个边界得你自己卡住











