必须启用“扩展插入语句”并设置合理“每批记录数”,否则仍导出单条INSERT;跨库迁移需显式写出列名,且须关闭分批导出等干扰选项。
Navicat 默认导出的是单条 INSERT INTO ... VALUES (...); 格式,每行一条语句。这种格式可读性强,但导入极慢——尤其在用 source 或命令行执行时,每条语句都触发一次解析+日志写入。真正能提速的关键,是勾选「扩展插入语句」(即批量插入)选项。
这个选项不在主界面显眼位置,而藏在「导出向导」第三步「导出设置」中:
→ 选择「SQL 文件」后进入设置 → 找到「插入语句格式」下拉框 → 必须选 扩展插入语句(不是“完整插入语句”,也不是“自定义”)
sql_mode=STRICT_TRANS_TABLES,多值 INSERT 对字段数量一致性更敏感,务必确保源数据无缺失列导出时「是否包含列名」会影响 SQL 兼容性与可维护性,但不直接影响性能。默认勾选「导出表结构」时,Navicat 会生成带列名的 INSERT INTO `table` (`col1`, `col2`) VALUES (...);若取消,则变成 INSERT INTO `table` VALUES (...)。
有时明明选了「扩展插入语句」,导出文件里却仍是逐行 INSERT。常见原因不是操作失误,而是被其他设置覆盖:
每批记录数 设置为 1:在「导出设置」高级选项卡里,默认可能是 1 或空值,需手动填一个合理值(如 1000),否则 Navicat 不会合并TEXT/BLOB 且「文本字段最大显示长度」过小:Navicat 在预处理阶段可能截断内容,导致无法安全合并,建议调至 10000 以上(路径:工具 → 选项 → 数据查看)想导出“当前选中的几行”,又没有稳定主键(比如日志表靠 created_at + status 组合筛选),强行手写 WHERE id IN (…) 易出错且不可复现。这时更稳的做法是:
SELECT *,确认结果集就是你要的那几行VALUES 列表(Navicat 15+ 支持);s*INSERT INTO → 替换为 ,n,再补上开头的 INSERT INTO ... VALUES
真正决定批量导出成败的,从来不是按钮点得够不够快,而是导出前对数据边界、目标环境版本、字符集和字段类型的确认是否足够扎实——漏掉任意一项,都可能让几十万行的 SQL 在导入中途报错停住。