如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。
insert into tb_test values(1,'tom');
insert into tb_test values(2,'cat');
insert into
tb_test
values
(
3
,
'jerry'
);
......
非大批量插入数据
1).批量插入数据
Insert into
tb_test
values
(
1
,
'Tom'
),(
2
,
'Cat'
),(
3
,
'Jerry'
);
2).手动控制事务
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;
3).主键顺序插入
主键顺序插入,性能要高于乱序插入。
主键乱序插入 : 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
table_name
fields te
rmi
nated
by
','
lines terminated
by
'\n'
;
'/root/sql1.log'
是文件要为绝对路径,
table_name
为表名,fields terminated
by
','
申明字段以','为分隔符,
lines terminated
by
'\n'
申明每行以回车为分隔符