MySQL索引怎么使用

58次阅读
没有评论

共计 3300 个字符,预计需要花费 9 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 MySQL 索引怎么使用,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

MySQL 索引的使用实例

一. 慢查询日志

二. 查询分析器——explain

三. 索引的基本使用

四. 复合索引

五. 覆盖索引

一. 慢查询日志

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

MySQL 索引怎么使用

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

MySQL 索引怎么使用

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

MySQL 索引怎么使用
我们去文件夹里面查看时发现它已经被存入慢查询日记里面

MySQL 索引怎么使用

这部分写明了如何通过慢日志找出比较慢的 SQL,后面部分要说为什么慢,如何能更快一点。

二. 查询分析器——explain

作用:通过这个可以知道查看 sql 慢在哪里,需要朝那些方面优化

列:我们创建一个 employee 数据表

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 

MySQL 索引怎么使用

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

MySQL 索引怎么使用

效果:如下图,可以看之前为什么那么慢, 需要四秒响应时间

MySQL 索引怎么使用

三. 索引的基本使用

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

MySQL 索引怎么使用

创建索引 效率提升

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

MySQL 索引怎么使用

// 删除
mysql  drop index idx_name on employee;

MySQL 索引怎么使用
老师 事列:
MySQL 索引怎么使用

如过用 like 检索,效率还是不变,所以要看你怎么用

MySQL 索引怎么使用

四. 复合索引

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

MySQL 索引怎么使用

目前是 all 全局扫描

select * from employee where name = 柳峰 // 查询分析
explain select * from employee where name = 柳峰 

MySQL 索引怎么使用

创建索引

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

MySQL 索引怎么使用

验证有 name 就能索引

// 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 

MySQL 索引怎么使用

没有 name 就不能使用索引

mysql  explain select * from employee where salary=8800;mysql  explain select * from employee where dept= 部门 A 

MySQL 索引怎么使用

五. 覆盖索引

按照上面步骤,我们可以看到四个索引,第一个是主键索引,后面是复合索引 name_salary_dept

mysql  show index from employee;

MySQL 索引怎么使用
如何触发

我们用 id 作为查询数据

mysql  select * from employee;mysql  select * from employee where id =11;

MySQL 索引怎么使用

只查 id

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

MySQL 索引怎么使用

// 查 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;

MySQL 索引怎么使用

看完了这篇文章,相信你对 MySQL 索引怎么使用有了一定的了解,想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计3300字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)