如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。
insert into tb_test values (1, 'tom ');
insert into tb_test values (2, 'cat ');
insert into tb_test values (3, 'jerry ');
.....
优化方案一
一次插入的数据在500~1000条
批量插入数据
Insert into tb_test values (1, 'Tom '), (2, 'Cat '), (3, 'Jerry ');
优化方案二
手动控制事务
使用 start transition or begin or set @@autocommit = 0 开启事务
start transaction;
insert into tb_test values (1, 'Tom '), (2, 'Cat '), (3, 'Jerry ');
insert into tb_test values (4, 'Tom '), (5, 'Cat '), (6, 'Jerry ');
insert into tb_test values (7, 'Tom '), (8, 'Cat '), (9, 'Jerry ');
commit;
优化方案三
主键顺序插入,性能要高于乱序插入。
主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3
主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89
大批量插入数据
如果一次性需要插入大批量数据(比如 : 几百万的记录),使用insert语句插入性能较低, 此时可以使用MySQL数据库提供的load指令进行插入。操作如下:
#客户端连接服务端时,加上参数 -–local-infile
mysql --local-infile -u root -p
#设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;
#执行load指令将准备好的数据,加载到表结构中
load data local infile '/root/sql1.log ' into table tb_user fields
terminated by ',' lines terminated by '\n ' ;
主键顺序插入性能高于乱序插入