插入数据——insert语句优化
1.批量插入
在一条语句中插入多条数据,避免重复书写insert语句,但是建议一条语句最多插入2000条以内的数据。
2.手动事务提交
因为MySQL中默认的事务提交方式是自动提交,当我们插入语句一次写了多条的时候,事务会在每一条insert语句执行完之后提交一次,这样频繁的开启事务也会影响SQL执行效率
3.主键顺序插入
主键插入的时候尽量顺序插入,因为主键顺序插入效率是高于乱序插入的
插入数据——load语句
1.大批量插入数据
如果一次性需要插入大批量数据,使用insert语句插入性能会比较低,可以使用数据库提供的load语句来进行插入数据
当数据都遵循一定规则的文件,就比如说上图,数据之间都用了逗号分隔,此时我们就可以通过三个步骤,来执行load语句
- 客户端连接服务端时,加上参数--local-infile
- 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
- 执行load指令将准备好的数据,加载到表格结构中
对于第一点的解释:表示客户端连接服务端的时候,我需要去加载本地文件
对于第二点的解释:使用语句开启开关
在这之前,我们可以执行语句select @@local_infile;来查看本地数据库是否有打开开关
而后我们再去执行语句去开启开关
对于第三点的解释:比如说有这么一条语句:
load data local infile '/root/sql1.log' into table 'table_user' files terminated by ',' lines terminated by '\n';
其中'/root/sql1.log'是你要导入数据的文件路径,'table_user'则是数据要插入进哪个表,','表示数据之间分隔的依据是什么,'\n'表示数据行与行之间用什么方式来分隔
可以看到,使用load语句来插入百万级数据,只用了17.96秒,速度还是很快的,据说如果用insert,可能需要十多分钟,像我这台笔记本,也许要用的时间会更长。
并且再提一嘴,需要执行的sql数据文件,里边的数据尽量也要按照主键顺序插入。
本篇文章仅作为学习笔记,供大家复习或者参考,学习源来自于B站黑马程序员下的MySQL数据库教程32. 进阶-SQL优化-插入数据_哔哩哔哩_bilibili