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

Posted 程序编织梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引系列知识三:索引总结相关的知识,希望对你有一定的参考价值。

一、前言

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

二、索引使用场景

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,索引失效要少用。

五、结尾

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

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

以上是关于索引系列知识三:索引总结的主要内容,如果未能解决你的问题,请参考以下文章

知识图谱实战系列六:Lucene在知识图谱上构建索引

MySQL系列

MySql知识体系总结(SQL优化篇)

轻松优化MySQL-之索引优化2 附赠送优化口诀

五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》

Hive知识总结