Navicat默认导入大型SQL文件慢因单条语句提交+语法检查+autocommit=1;关闭语法验证、设autocommit=0并用快速执行可提速3–10倍;超500MB或大量INSERT时应改用命令行mysql配合--force等参数。
直接用 navicat 的「运行 sql 文件」功能 + 关键参数调整,比默认方式快 3–10 倍;但若脚本超 500mb 或含大量 insert,命令行 mysql 仍是唯一稳解。
Navicat 默认以单条语句为单位提交事务,每执行一条 INSERT 就触发一次磁盘刷写和日志同步;同时 GUI 层会逐行解析语法、校验对象依赖、高亮关键字——这些对小文件无感,但遇到 200MB+ 的初始化脚本时,光加载阶段就卡住几十秒。更糟的是,它默认开启自动提交(autocommit = 1),等于把百万级插入拆成百万次 I/O。
在「运行 SQL 文件」窗口中,这三项不关,速度基本无法提升:
SET autocommit = 0;,结尾加 COMMIT;:把全部操作包进一个事务注意:SET autocommit = 0 必须写在脚本最前面,且不能被注释包裹;如果原脚本已有 USE database_name;,确保它在 SET 之后、数据语句之前。
mysql 命令行这是真正可靠的大容量导入路径,尤其适用于含 CREATE TABLE + 百万级 INSERT 的 dump 文件:
mysql -h 127.0.0.1 -P 3306 -u root -p your_db < large_file.sql
--force --default-character-set=utf8mb4 --max-allowed-packet=512M
SET NAMES utf8mb4,建议删掉或改为 SET NAMES utf8mb4 COLLATE utf8mb4_0900_as_cs(适配 MySQL 8.0+)Windows 下若提示乱码,用记事本另存为 UTF-8 无 BOM 格式;macOS/Linux 用 iconv -f GBK -t UTF-8 input.sql > output.sql 转编码。
Navicat 对文件编码极其敏感,且不报明确错误:
Unknown character set: 'utf8mb4' —— 用 VS Code 或 Sublime Text 清除 BOMDELIMITER $$,必须配对出现 DELIMITER ;,否则 Navicat 解析到一半就静默终止File not found —— 全部移至英文路径下再试真正耗时的从来不是“怎么点按钮”,而是确认编码是否干净、事务是否闭合、字符集声明是否匹配服务端实际配置——这三个点没对齐,再调参数也白搭。