Mysql索引使用

表结构

在这里插入图片描述
索引: create index idx_ename_job_mgr on emp(ename,job,mgr)
索引长度: ename = 33 job=30 mgr=5 总长:68

一.全值匹配

explain select * from emp where ename=‘张三’ and job=‘推销员’ and mgr=7698;
使用全部索引总长68
在这里插入图片描述

最佳左前缀

**带头大哥不能死,中间兄弟不能断,符合条件可交换.**	
带头大哥GG不使用索引

在这里插入图片描述
explain select * from emp where job=‘推销员’ ;
带头大哥GG,全表扫描
在这里插入图片描述

在这里插入图片描述
explain select * from emp where mgr=7698;
带头大哥GG,全表扫描
在这里插入图片描述

在这里插入图片描述
explain select * from emp where job=‘推销员’ and mgr=7698 ;
带头大哥GG,全表扫描
在这里插入图片描述
在这里插入图片描述
explain select * from emp where mgr=7698 and job=‘推销员’;
带头大哥GG,全表扫描
在这里插入图片描述

有头,断兄弟,使用部分索引

在这里插入图片描述
explain select * from emp where ename=‘张三’ and mgr=7698;
使用部分索引ename字段,总长为33
在这里插入图片描述

在这里插入图片描述
explain select * from emp where mgr=7698 and ename=‘张三’;
使用部分索引ename字段,总长为33
在这里插入图片描述

符合条件位置可交换(有带头且不断中间兄弟)

在这里插入图片描述
explain select * from emp where ename=‘张三’ and job=‘推销员’;
使用部分索引ename、job字段,总长63
在这里插入图片描述

在这里插入图片描述
explain select * from emp where job=‘推销员’ and ename=‘张三’ ;
使用部分索引ename、job字段,总长63
在这里插入图片描述

在这里插入图片描述
explain select * from emp where ename=‘张三’ and job=‘推销员’ and mgr=7698;
使用全部索引ename、job、mgr字段,总长68
在这里插入图片描述

在这里插入图片描述
explain select * from emp where job=‘推销员’ and mgr=7698 and ename=‘张三’ ;
使用全部索引ename、job、mgr字段,总长68
在这里插入图片描述

在这里插入图片描述
explain select * from emp where mgr=7698 and ename=‘张三’ and job=‘推销员’ ;
使用全部索引ename、job、mgr字段,总长68
在这里插入图片描述

二.不在索引列计算操作

三.尽量使用覆盖索引,少使用select *

四.mysql中使用is null、is not null、or、!=、>、<时可能会导致索引失效

五.like以%开头可能会导致索引失效eg:(’%abc’)

解决索引失效---------->使用覆盖索引

like使用覆盖索引

范围使用覆盖索引

where,或者group by条件中出现了索引列的计算也能通过覆盖索引解决,但是group by可能会导致Extra中Using temporary,Using filesort(group by计算索引列等价于重排序).因此在rows少的情况下无大碍.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值