文章目录
MySQL之InnoDB索引之SQL优化
注:本文基于Linux系统上MySQL v8.0.26进行讲解
1.插入少量数据
1.1问题
insert into tb_test values(1,'tom');
insert into tb_test values(2,'cat');
insert into tb_test values(3,'jerry');
.....
1.2批量插入数据优化
Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
1.3手动控制事务
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;
1.4主键顺序插入
2.插入大量数据
-- 客户端连接服务端时,加上参数 -–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' ;
3.插入大量数据(演示)
CREATE TABLE `tb_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`name` VARCHAR(20) NOT NULL,
`birthday` DATE DEFAULT NULL,
`sex` CHAR(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique_user_username` (`username`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ;
-- 客户端连接服务端时,加上参数 -–local-infile
mysql –-local-infile -u root -p
-- 设置全局参数local_infile为1,开启从本地加载文件导入数据的开关
set global local_infile = 1;
load data local infile '/root/load_user_100w_sort.sql' into table tb_user fields terminated by ',' lines terminated by '\n' ;
4.主键优化
4.1数据组织方式
4.2页分裂
4.2.1主键顺序插入
④. 当第二页写满了,再往第三页写入
4.2.2主键乱序插入
4.3页合并
4.4索引设计原则
5.order by优化
show variables like 'sort_buffer_size';
6.演示(order by优化)
7. group by优化
8. 演示(group by优化)
9.limit优化
10.演示(limit优化)
11.count优化
11.1介绍
select count(*) from tb_user;
11.2用法
12.update优化
update course set name = 'javaEE' where id = 1 ;
update course set name = 'javaEE' where id = 1 ;