insert优化
从这节课开始,插入多条数据的时候不能一条一条插入,因为每一次的insert都会与数据库进行建立连接、进行网络传输,性能会比较低。优化如下
一、插入的数据量不超过十万
1、批量插入,当需要插入500~1000条数据,当需要插入上万条数据时就需要分多次insert插入
insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
2、手动事务提交。MySQL的事务提交方式默认是自动提交,每次insert都会重新开启和关闭事务,导致事务操作频繁
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、主键顺序插入。顺序插入的性能高于乱序插入,原因取决于MySQL的数据组织结构(下节课会学) (1)主键乱序插入: 2 4 3 8 6 5 7 1 9 (2)主键顺序插入: 1 2 3 4 5 6 7 8 9
二、插入的数据量超过10万
当业务需要插入几百万大量数据的时候,使用insert语句插入性能较低,此时可以使用MySQL数据库提供的load指令进行插入 使用load指令分为三个步骤,如下
步骤一:客户端连接服务端时,加上参数 --local-infile
mysql --local-infile -u root -p
步骤二:设置全局参数local_infile为1,表示开启从本地加载文件导入数据的开关
select @@local_infile;查看全局参数是否开启,0表示关闭,1表示开启
set global local_infile = 1;
步骤三:执行load指令将准备好的数据sql.log,加载到表(tb_user)结构中
load data local infile '/root/sql.log' into table 'tb_user' fields terminated by ',' lines terminated by '\n';