Exemples d'utilisation des index MySQL

Préface

Ce sont les notes que j'ai prises en écoutant la conférence du professeur. Ceci est une adresse vidéo
Auteur: Chenyun Zhi se
concentre sur mon blog csdn , note que les connaissances Linux sont encore plus mises à jour
J'écris un blog uniquement en csdn

Il est préférable de soutenir cet article pour le visionner

1. Journal des requêtes lent

//查看是否开启慢查询日志
mysql> show variables like '%slow%';
//临时开启慢查询日志
mysql> set global slow_query_log=ON;
//查看是否开启慢查询日志
mysql> show variables like '%slow%';

Insérez la description de l'image ici

//查询超过多少时间就可以记录,上面是如果超过10秒就要记录
mysql> show variables like '%long%';
//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)
mysql> set long_query_time=1;
//查看日记存储方式,默认FILE
mysql> show variables like '%log_output%';
// 慢查询日志文件所在位置
mysql> show variables like '%datadir%';

Insérez la description de l'image ici

//响应时间是3秒,超过了原先设定的一秒
mysql> select sleep(3);

Insérez la description de l'image ici
Lorsque nous sommes allés archiver le dossier, nous avons constaté qu'il était stocké dans le journal des requêtes lentes

Insérez la description de l'image ici

Cette partie explique comment trouver le SQL le plus lent dans le journal lent . La dernière partie expliquera pourquoi il est lent et comment il peut être plus rapide.

2. Analyseur de requêtes - expliquer

Rôle : Grâce à cela, nous pouvons savoir où afficher SQL est lent et quels aspects doivent être optimisés

Colonne: nous créons un tableau de données des employés

create table employee(
	id int not null auto_increment primary key,
	name varchar(30) comment '姓名',
	sex varchar(1) comment '性别',
	salary int comment '薪资(元)',
	dept varchar(30) comment '部门'
);

insert into employee(name, sex, salary, dept) values('张三', '男', 5500, '部门A');
insert into employee(name, sex, salary, dept) values('李洁', '女', 4500, '部门C');
insert into employee(name, sex, salary, dept) values('李小梅', '女', 4200, '部门A');
insert into employee(name, sex, salary, dept) values('欧阳辉', '男', 7500, '部门C');
insert into employee(name, sex, salary, dept) values('李芳', '女', 8500, '部门A');
insert into employee(name, sex, salary, dept) values('张江', '男', 6800, '部门A');
insert into employee(name, sex, salary, dept) values('李四', '男', 12000, '部门B');
insert into employee(name, sex, salary, dept) values('王五', '男', 3500, '部门B');
insert into employee(name, sex, salary, dept) values('马小龙', '男', 6000, '部门A');
insert into employee(name, sex, salary, dept) values('龙五', '男', 8000, '部门B');
insert into employee(name, sex, salary, dept) values('冯小芳', '女', 10000, '部门C');
insert into employee(name, sex, salary, dept) values('马小花', '女', 4000, '部门B');
insert into employee(name, sex, salary, dept) values('柳峰', '男', 8800, '部门A');

Insérez la description de l'image ici

//通过explain解读他,后面加一个\G便于阅读
mysql> explain select * from employee where name='柳峰'\G;
//扫描快捷
mysql> explain select * from employee where id=13\G;

Insérez la description de l'image ici

Effet: comme le montre la figure ci-dessous, vous pouvez voir pourquoi il était si lent auparavant et qu'il fallait quatre secondes pour répondre

Insérez la description de l'image ici

3. Utilisation de base de l'index

mysql> show index from employee\G;
//主键会默认建一个id索引

Insérez la description de l'image ici

Amélioration de l'efficacité de la création d'index

//查询分析
mysql> explain select * from employee where name='柳峰';
//创建普通索引
mysql> create index idx_name on employee(name);

Insérez la description de l'image ici

//删除
mysql> drop index idx_name on employee;

Insérez la description de l'image ici
Liste des enseignants:
Insérez la description de l'image ici

Si vous utilisez like pour rechercher, l'efficacité reste la même, cela dépend donc de la façon dont vous l'utilisez

Insérez la description de l'image ici

4. Indice composite

//查的时候可以看到一个主键索引
mysql> show index from employee\G;

Insérez la description de l'image ici

Actuellement tout le scan global

select * from employee where name ='柳峰';
//查询分析
explain select * from employee where name ='柳峰'\G;

Insérez la description de l'image ici

Créer un index

//创建索引
create index idx_name_salary_dept on employee(name,salary,dept);
//查询分析
explain select * from employee where name ='柳峰'\G;

Insérez la description de l'image ici

Vérifiez qu'il existe un nom à indexer

// name和salary
mysql> explain select * from employee where name ='柳峰' and salary=8800\G;
//name和dept
mysql> explain select * from employee where name ='柳峰' and dept='部门A'\G;

Insérez la description de l'image ici

Impossible d'utiliser l'index sans nom

mysql> explain select * from employee where  salary=8800;

mysql> explain select * from employee where  dept='部门A';

Insérez la description de l'image ici

V. Index de couverture

Selon les étapes ci-dessus, nous pouvons voir quatre index, le premier est l' index de clé primaire , suivi de l' index compositename_salary_dept

mysql> show index from employee;

Insérez la description de l'image ici
Comment déclencher

Nous utilisons id comme données de requête

mysql> select * from employee;

mysql> select * from employee where id =11;

Insérez la description de l'image ici

Vérifier uniquement l'identifiant

mysql> explain select id from employee  employee where id=11\G;

mysql> explain select id from employee\G;

Insérez la description de l'image ici

//查name,salary
mysql> explain select name,salary from employee;

//查name,salary,dept
mysql> explain select name,salary,dept from employee;

//因为没有sxe条件,所以只能做全部扫描type为null
mysql> explain select name,sex,salary,dept from employee;

Insérez la description de l'image ici

Mon blog: https://blog.csdn.net/weixin_46654114
Je veux faire attention à mon site b: https://space.bilibili.com/391105864
Instructions de réimpression: Dites-moi, assurez-vous d'indiquer la source et joignez le lien de mon blog.

S'il vous plaît, donnez-moi un coup de pouce et encouragez-moi
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46654114/article/details/109257999
conseillé
Classement