202111-19更文-mysql索引回表和最左匹配原则

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

mysql索引回表和最左匹配原则

前文

本文为工作中遇到一个数据量极大的数据库时,需要对查询进行优化时对索引相关知识的总结回顾,不代表所有内容完全正确,主要为个人理解内容,不足之处还请见谅。

mysql索引回表

所谓索引的回表,也就是mysql在查询的过程中,经过索引匹配到相关信息后,到数据库查询索引中不包含字段的过程。显而易见,对于查询操作本身而言,我们要尽可能的避免回表操作的出现,也就是在可能的情况下尽量通过所以直接查询到所有的目标字段。

mysql索引最左匹配原则

首先看一下什么是最左匹配原则,最左匹配原则指的是在mysql的索引中,最左侧字段优先的原则。举例来说,如果利用x,y,z三个字段建立索引,实际所建立的索引是x,(x,y)以及(x,y,z)三个索引。当我们进行查询时的查询条件为x,z时,由于不匹配y字段,因此只能匹配x索引。而当查询条件为x,y,z时,则可以匹配x,y,z索引。而当条件仅仅为y时,则不会进行索引匹配。 如下,查询条件为y,并未出现索引生效。 image.png 而当查询条件为x,y时,根据最左匹配原则,设置的索引会生效。

image.png

关于索引最左匹配和回表的一些个人理解

  • 查询条件时应该将必然出现的条件放在索引的最左几个字段内,使得在正常的查询情况下,索引能够尽可能的命中。命中的条件越多,如果有索引命中之外的字段,回表查询时的数据集数量则会越小,相对而言查询的效率也就回越高。
  • 在能够覆盖索引查询的情况下,也就是索引将查询字段覆盖,例如通过索引进行id的查询,可以避免回表操作,大大提升效率。
  • 在建立索引时,尽量采用区分度高的字段作为索引的列。通过这种索引可以大大提高数据的区分度,回表时的数据量可以显著减少,对于查询效率提升明显。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。

猜你喜欢

转载自juejin.im/post/7032298550071394335