1. 手动提交事务

set autocommit=0;

insert into...;

commit;
set autocommit=1;

由于每插入一条数据就会自动提交事务,因此数据量大的时候会变得非常慢。

直接关闭自动提交事务,等所有语句插入完再进行提交能够加快速度。

2. 手动设置日志参数

参数一: innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2

innodb_flush_log_at_trx_commit 设置为 0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。

innodb_flush_log_at_trx_commit设置为 1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去。

innodb_flush_log_at_trx_commit设置为 2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。

参数二: sync_binlog默认值为1,可设置为[0,N)

当 sync_binlog =0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。

当 sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。

#1.进入MySQL命令行 临时修改这两个参数 
set global innodb_flush_log_at_trx_commit = 2; 
set global sync_binlog = 2000;

#2.执行SQL脚本导入 
mysql -uroot -pxxxxxx testdb < testdb.sql 

# 3.导入完成 再把参数改回来 
set global innodb_flush_log_at_trx_commit = 1; set global sync_binlog = 1;

参考文献

https://cloud.tencent.com/developer/article/1650590

最后修改:2024 年 02 月 22 日
如果觉得我的文章对你有用,请随意赞赏