MySQL索引怎么使用
小编给大家分享一下MySQL索引怎么使用,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
MySQL索引的使用实例一. 慢查询日志
二. 查询分析器——explain
三. 索引的基本使用
四. 复合索引
五. 覆盖索引
一. 慢查询日志//查看是否开启慢查询日志mysql>showvariableslike'%slow%';//临时开启慢查询日志mysql>setglobalslow_query_log=ON;//查看是否开启慢查询日志mysql>showvariableslike'%slow%';
//查询超过多少时间就可以记录,上面是如果超过10秒就要记录mysql>showvariableslike'%long%';//改成一秒,如果超过一秒就写到慢日志里面去(一般一秒是最好的)mysql>setlong_query_time=1;//查看日记存储方式,默认FILEmysql>showvariableslike'%log_output%';//慢查询日志文件所在位置mysql>showvariableslike'%datadir%';
//响应时间是3秒,超过了原先设定的一秒mysql>selectsleep(3);
我们去文件夹里面查看时发现它已经被存入慢查询日记里面
这部分写明了如何通过慢日志找出比较慢的SQL,后面部分要说为什么慢,如何能更快一点。
二. 查询分析器——explain作用:通过这个可以知道查看sql慢在哪里,需要朝那些方面优化
列:我们创建一个employee数据表
createtableemployee(idintnotnullauto_incrementprimarykey,namevarchar(30)comment'姓名',sexvarchar(1)comment'性别',salaryintcomment'薪资(元)',deptvarchar(30)comment'部门');insertintoemployee(name,sex,salary,dept)values('张三','男',5500,'部门A');insertintoemployee(name,sex,salary,dept)values('李洁','女',4500,'部门C');insertintoemployee(name,sex,salary,dept)values('李小梅','女',4200,'部门A');insertintoemployee(name,sex,salary,dept)values('欧阳辉','男',7500,'部门C');insertintoemployee(name,sex,salary,dept)values('李芳','女',8500,'部门A');insertintoemployee(name,sex,salary,dept)values('张江','男',6800,'部门A');insertintoemployee(name,sex,salary,dept)values('李四','男',12000,'部门B');insertintoemployee(name,sex,salary,dept)values('王五','男',3500,'部门B');insertintoemployee(name,sex,salary,dept)values('马小龙','男',6000,'部门A');insertintoemployee(name,sex,salary,dept)values('龙五','男',8000,'部门B');insertintoemployee(name,sex,salary,dept)values('冯小芳','女',10000,'部门C');insertintoemployee(name,sex,salary,dept)values('马小花','女',4000,'部门B');insertintoemployee(name,sex,salary,dept)values('柳峰','男',8800,'部门A');
//通过explain解读他,后面加一个\G便于阅读mysql>explainselect*fromemployeewherename='柳峰'\G;//扫描快捷mysql>explainselect*fromemployeewhereid=13\G;
效果:如下图,可以看之前为什么那么慢,需要四秒响应时间
三. 索引的基本使用mysql>showindexfromemployee\G;//主键会默认建一个id索引
创建索引 效率提升
//查询分析mysql>explainselect*fromemployeewherename='柳峰';//创建普通索引mysql>createindexidx_nameonemployee(name);
//删除mysql>dropindexidx_nameonemployee;
老师 事列:
如过用like检索,效率还是不变,所以要看你怎么用
四. 复合索引//查的时候可以看到一个主键索引mysql>showindexfromemployee\G;
目前是all全局扫描
select*fromemployeewherename='柳峰';//查询分析explainselect*fromemployeewherename='柳峰'\G;
创建索引
//创建索引createindexidx_name_salary_deptonemployee(name,salary,dept);//查询分析explainselect*fromemployeewherename='柳峰'\G;
验证有name就能索引
//name和salarymysql>explainselect*fromemployeewherename='柳峰'andsalary=8800\G;//name和deptmysql>explainselect*fromemployeewherename='柳峰'anddept='部门A'\G;
没有name就不能使用索引
mysql>explainselect*fromemployeewheresalary=8800;mysql>explainselect*fromemployeewheredept='部门A';
五. 覆盖索引按照上面步骤,我们可以看到四个索引,第一个是主键索引,后面是复合索引name_salary_dept
mysql>showindexfromemployee;
如何触发
我们用id作为查询数据
mysql>select*fromemployee;mysql>select*fromemployeewhereid=11;
只查id
mysql>explainselectidfromemployeeemployeewhereid=11\G;mysql>explainselectidfromemployee\G;
//查name,salarymysql>explainselectname,salaryfromemployee;//查name,salary,deptmysql>explainselectname,salary,deptfromemployee;//因为没有sxe条件,所以只能做全部扫描type为nullmysql>explainselectname,sex,salary,deptfromemployee;
看完了这篇文章,相信你对MySQL索引怎么使用有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。