MySQL进阶之路(十八)—— 最常用的索引使用规则

最常用的索引使用规则(干货篇)

一、概述

​ 在前面的几篇文章中,详细讲解了索引的原理以及B+树的结构,今天,就这此基础之上来聊聊平时开发中经常可以用到索引的一些地方。这样大家在平时写SQL的时候就会去留意这些点,从而改善查询的性能。

​ 本文种的截图使用到了 Explain,这个是用于分析SQL语句的执行情况的,以后的文章会详细介绍到,这里大家不必深究。

二、常用规则

1、等值匹配规则

​ 这个是最简单的了,就是在where条件中用到的字段,就是建立索引时用到的字段,在查询的时候就直接在二级索引中去查找,然后会去匹配与条件完全相等的那个键。这个是最简单的

2、最左匹配规则

现在有这样的索引

ADD INDEX `union_index`(`name`, `age`, `description`) USING BTREE;

​ 我们在使用where条件查询的时候,如果条件里面有用到这三个字段,那么就可以用到这个联合索引。那么最左匹配是什么情况呢?我们看下面的例子就明白了:

例一:

WHERE description ='sadsad' and age = '32321'

请添加图片描述

例二:

WHERE `name` = 'xxxx' and age = 'xxxx' and description = 'xxxx'

请添加图片描述

例三:

WHERE `name` = 'xxxx' and age = 'xxxx'

请添加图片描述

​ 在上面三个例子中,只有例子一是没有办法使用到索引的。因此对于索引union_index(name, age, description) ,我们想要使用的话,在where语句中就需要按照索引的顺序来写条件。

特殊情况:

如果你where语句中有复合索引的全部或者部分字段,但是顺序并不是按照最左原则排序的,这个时候,如果where条件中字段的顺序如果可以通过调整顺序来使用索引那么MySQL就会对SQL进行优化,使其最终能够使用到索引

请添加图片描述

3、最左前缀匹配规则

​ 这个比较好理解,与第一种全值匹配不一样的是,只要这个值的前缀符合要求就可以,并不要求一定相等。也就是常说的查找某字段以xxx开头的,到SQL语句中其实就是下面这样:

WHERE `name` like 'xxx%'

因为B+树中是按照顺序来排的,因此根据前缀来查找是完全可以的,当然前提条件是这个字段是索引字段

请添加图片描述

4、范围匹配规则

​ 这个相比你通过名字就可猜到,这个其实就是where语句中使用到了 > 或者 <来进行范围查询。就像下面这样:

WHERE `name` > 'xxx111' and `name` < 'xxx999'

请添加图片描述

这个查找的方法其实很简单,因为B+树种的叶子节点之间组成的是一个双向链表,然后每个叶子节点内的记录组成了一个单向链表,我们在进行范围查询的时候,只需要根据范围查询的两个条件找到链表的”两端“,然后再遍历这个链表将数据返回回去就可以了

5、最左匹配规则 + 等值匹配规则 + 范围匹配规则

其实就是多个规则同时使用,废话不多说,我们直接看例子:

数据:

请添加图片描述

SQL语句:

WHERE `name` = 'AAAAC' AND age < 60 and age > 20

执行效果:
请添加图片描述

原理很简单,其实总体还是符合最左匹配原则,即使nameage条件的顺序换个位置,也还是可以使用到的,因为有MySQL对SQL进行优化,使其能够符合最左匹配规则,有了这个前提,就可以使用索引了。

首先,会根据第一个name字段的全值匹配找到所有符合的,然后再对这些数据进行范围匹配。

三、小结

​ 上面讲解了5种常常使用的匹配规则,其实没有必要一个一个去记,你只需要记住这些规则的共同点,就是能够使用B+树进行数据的搜索,当然,前提条件是你得对B+树足够熟悉,这一点在我前面的文章种有讲到,倘若给你一些条件,如果你绞尽脑汁都没办法去使用B+树进行查找的话,那么MySQL肯定也不会。

熟悉,这一点在我前面的文章种有讲到,倘若给你一些条件,如果你绞尽脑汁都没办法去使用B+树进行查找的话,那么MySQL肯定也不会。

​ 个人认为,上面的规则其实都可以统称为“用B+树查找数据的方式”,因为这就是本质

好了,以上就是全部内容了,如果有问题或者有有需要补充的欢迎评论指出来,大家共同进步!

猜你喜欢

转载自blog.csdn.net/weixin_44829930/article/details/121051974