当数据量很大时,执行 mysql> source filename.sql 很慢,有什么办法更快
当数据量很大时,执行 mysql> source filename.sql 很慢,有什么办法更快
我给你最简单、最有效、立刻能上手的提速方案,只做最关键的几步,就能让大 SQL 导入快 10~100 倍,不用改复杂配置。
一、最快方案:执行 source 前,先运行这 4 行(必做)
先登录 MySQL,选中数据库,然后复制执行这 4 行:
sql
SET autocommit = 0;
SET unique_checks = 0;
SET foreign_key_checks = 0;
SET SESSION tx_isolation = 'READ-UNCOMMITTED';
然后再执行:
sql
source 你的文件.sql;
导入完成后,一定要恢复设置:
sql
COMMIT;
SET autocommit = 1;
SET unique_checks = 1;
SET foreign_key_checks = 1;
二、比 source 更快:用系统命令行导入(推荐)
不要在 mysql> 里面用 source,直接在 CMD / 终端执行:
bash
mysql -u用户名 -p 数据库名 < filename.sql
例子:
bash
mysql -uroot -p testdb < guolei.20260521sql.sql
速度比
source 快 30%~200%。三、再加 2 个参数,速度再翻倍
bash
mysql -u用户名 -p --max_allowed_packet=1G --net_buffer_length=1M 数据库名 < filename.sql
四、如果你只能用 source(必须在 mysql> 里执行)
就在执行 source 前加这 5 行:
sql
USE 你的数据库;
SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;
SET tx_isolation='READ-UNCOMMITTED';
source filename.sql;
COMMIT;
SET autocommit=1;
SET unique_checks=1;
SET foreign_key_checks=1;
五、为什么原来这么慢?
- 默认每插入一条就提交一次事务(极慢)
- 默认每条都检查外键、唯一键(极耗资源)
source会打印大量日志
六、最简单总结(照着做就行)
- 导入前关闭自动提交、外键检查、唯一检查
- 优先用命令行导入,不要用 mysql> source
- 加参数
--max_allowed_packet=1G

浙公网安备 33010602011771号