mysql 数据索引使用,MySQL索引怎么使用

MySQL索引怎么使用

发布时间:2020-12-14 09:59:48

来源:亿速云

阅读:70

作者:小新

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

MySQL索引的使用实例一. 慢查询日志

二. 查询分析器——explain

三. 索引的基本使用

四. 复合索引

五. 覆盖索引

一. 慢查询日志//查看是否开启慢查询日志

mysql> show variables like '%slow%';//临时开启慢查询日志

mysql> set global slow_query_log=ON;//查看是否开启慢查询日志

mysql> show variables like '%slow%';

377f7637bb66c66361c69391b2e6454b.png//查询超过多少时间就可以记录,上面是如果超过10秒就要记录

mysql> show variables like '%long%';//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)mysql> set long_query_time=1;//查看日记存储方式,默认FILE

mysql> show variables like '%log_output%';// 慢查询日志文件所在位置

mysql> show variables like '%datadir%';

c60ed94b94df68356f6d3235d4c37d94.png//响应时间是3秒,超过了原先设定的一秒

mysql> select sleep(3);

e18a6d81b6f21109bb113ced87fa2b73.png

我们去文件夹里面查看时发现它已经被存入慢查询日记里面

b887b1162b45335b7a5b174a261dd26e.png

这部分写明了如何通过慢日志找出比较慢的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');

7de66ec220590559f5efadb3874e436e.png//通过explain解读他,后面加一个\G便于阅读

mysql> explain select * from employee where name='柳峰'\G;//扫描快捷

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

d59b7d5a8ede9eb4bf71ed7febb602a7.png

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

a52e1ee3ac42da5c03c205fad9c471ec.png

三. 索引的基本使用mysql> show index from employee\G;//主键会默认建一个id索引

b8e1626284964b10711d70bb4b4112c5.png

创建索引 效率提升//查询分析

mysql> explain select * from employee where name='柳峰';//创建普通索引

mysql> create index idx_name on employee(name);

87485e6d95e636dac285740e158ab9b8.png//删除

mysql> drop index idx_name on employee;

c3ad478cd2a105b0571bbeffd528848a.png

老师 事列:

2e4df88c0bfcf916d4694dcf90172cee.png

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

3ba4ec859d857d5dbd77f7fe5052cbd2.png

四. 复合索引//查的时候可以看到一个主键索引

mysql> show index from employee\G;

0ac0261a1079b70893ab2123d3606d72.png

目前是all全局扫描select * from employee where name ='柳峰';//查询分析

explain select * from employee where name ='柳峰'\G;

a77fd4d4bfc9804294e63f2ac76bc2eb.png

创建索引//创建索引

create index idx_name_salary_dept on employee(name,salary,dept);//查询分析

explain select * from employee where name ='柳峰'\G;

037905f39adc18af6b689d4faed77e11.png

验证有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'\G;

7b4dd1b68d5038561764bed530823769.png

没有name就不能使用索引mysql> explain select * from employee where  salary=8800;mysql> explain select * from employee where  dept='部门A';

53765563d27fb0722920e42b17eb962a.png

五. 覆盖索引

按照上面步骤,我们可以看到四个索引,第一个是主键索引,后面是复合索引name_salary_deptmysql> show index from employee;

25d17c0012b2c01e8d94ba96896aa592.png

如何触发

我们用id作为查询数据mysql> select * from employee;mysql> select * from employee where id =11;

ee7a4bdabbd724963192b22cf8acf143.png

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

8ed51eeb981c610b323270b33eab501d.png//查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;

ad115e912e416c6eb21d62c3b3fe0011.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值