索引系列知识三:索引总结

一、前言

前面二章我们讲解了《 聚集索引与非聚集索引详解 》《联合索引、覆盖索引和索引下推详解》,大家可以点击查看。这一章我们对什么时候用索引、索引失效的情况进行总结,并编成一个顺口溜方便大家记忆。

二、索引使用场景

2.1 哪些情况需要创建索引

1、主键自动建立唯一索引
这个不用多解释了,主键会自动建立主键索引。

2、频繁作为查询条件的字段应该创建索引 where
打个比方:where a = xxx,我们应该在a 上建立索引。

3、多表关联查询中,关联字段应该创建索引 on 两边都要创建索引。

4、查询中排序的字段,应该创建索引
打个比方:order by a,我们应该在a 上建立索引。

5、联合索引
《联合索引、覆盖索引和索引下推详解》

6、统计或者分组字段,应该创建索引

2.2 哪些情况不需要创建索引

1、表记录太少 索引是要有存储的开销
2、频繁更新索引。
3、查询字段使用频率不高

三、索引失效的情况

1.尽量使用全值匹配。
在联合索引中,尽量使条件与索引一一对应。

2.最左前缀法则要遵守
如果索引了多个列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始 并且不跳过索引中的列。

举例说明:假如对字段 (a, b, c) 建立联合索引。

where a = xxx and b = xxx and c = xxx  //使用索引
where b = xxx   //不使用索引
where c = xxx   //不使用索引

3.不要在索引上做计算
不要进行这些操作:计算、函数、自动/手动类型转换,不然会导致索引失效而转向全表扫描。
举例说明:

select * from tuser where left(loginname,1)='zy';   //不会使用索引,因为在列上做了计算

4.范围条件右边的列失效
范围条件(bettween、<、>、in等)右边的列会索引失效。
举例说明:

//name和age会使用索引,但是sex不会用索引。
explain select * from tuser where name='asd' and age>20 and sex='1'; 

5.尽量使用覆盖索引
尽量使用覆盖索引(只查询索引的列),也就是索引列和查询列一致,减少select *

《联合索引、覆盖索引和索引下推详解》

6.索引字段上不要使用不等
索引字段上使用(!= 或者 < >)判断时,会导致索引失效而转向全表扫描
注:主键索引会使用范围索引,辅助索引会失效。

举例说明:

 select * from tuser where loginname != 'zhy';//使用了!= ,索引失效

7.主键索引字段上不可以判断null
举例说明:

select * from tuser where name is  null;//索引失效,

8.索引字段使用like不以通配符开头
举例说明:

 select * from tuser  where name like 'a%';//使用索引
 select * from tuser  where name like '%a';//不使用索引

9.索引字段字符串要加单引号
索引字段是字符串,但查询时不加单引号,会导致索引失效而转向全表扫描
举例说明:

select * from tuser where name=123;//不会使用索引,应改成 where name='123'

10.索引字段不要使用or
索引字段使用 or 时,会导致索引失效而转向全表扫描
举例说明:

select * from tuser where name='asd' or age=23;// 不会使用索引,因为有or.

四、索引顺口溜

总结:
在这里插入图片描述

记忆口诀:
\

全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能算;
索引列上少计算,范围之后全失效;
Like百分写最右,索引覆盖不写星;
不等空值还有or,索引失效要少用。

五、结尾

好了,索引系列知识到此结束。希望对大家有所帮助。

另外大家帮忙关注一下我的微信公众号,每天更新优质内容。并赠送上百套学习资料和视频。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序编织梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值