2023-2更文8-mysql索引的使用及优化

176 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

mysql索引的使用及优化

前文

本文的主要内容主要是针对msyql的索引的使用及使用过程中一些优化相关知识的总结。

mysql索引的使用及优化

索引生效过程

索引主要是作为一个类似目录的方式存在,使用时会首先通过索引查找到对应的id,再通过主键索引进行回表查询,查询到实际的数据。

最左匹配原则

最左匹配原则指的是mysql的联合索引在使用过程中,需要从索引字段的最左侧开始匹配,也就是举例来说,当我们某个索引的字段为a、b、c时,实际上所建立的索引为a,a-b,a-b-c三个索引。那么查询时当我们的条件为

a = 1 and c =3

时,则只会通过索引a进行实际数据的查找。同样的,当我们的查询条件为

a = 1 and b = 2

时,则会通过索引进行a,b字段数据的条件筛选,大大提高查询的效率。因此在索引建立过程中,要充分考虑最左匹配原则。

索引下推

索引下推主要表示查询过程中,所查询的字段如果索引中存在,即使没使用索引也会先通过索引进行条件筛选。主要是针对联合索引,例如上述的a,b,c的索引,c字段未采用索引查询时,也可以通过索引下推,实现实际的筛选功能,提高查询的效率。

索引失效

索引不是时刻都能够生效的,在某些情况下会出现索引失效的问题:

  • 当where查询条件中出现范围查找时,范围查找为最后一个通过索引检索的字段
  • 当索引的字段采用了函数进行计算时,会导致mysql索引失效
  • 当采用like语句查询时,只有xx%的方式能够使用索引,其他方式失效。另外有一种特殊情况,当索引已经覆盖了所有查询字段时,like中的模糊查询的索引会无条件生效
  • 当sql语句中采用or连接时,如果or连接的字段存在非索引字段,那么会导致索引失效

索引使用时的优化

  • 由于索引是采用b+树进行排序,索引的字段实际上是有序的。那么当我们需要进行数据的排序时,可以根据我们的数据排序需求进行联合索引字段顺序的创建。
  • 索引字段尽量保证其独立的特点,当索引字段的重复性过高时,mysql的优化器会识别不需要通过索引,采用全表查询速度更快。
  • 在适当的条件下,可以通过覆盖索引避免数据的回表过程,直接在索引中查询所需要的数据。
  • 频繁更新大于查询频率的数据,不要新建索引。

总结

本文的内容主要是对索引相关使用及优化知识的总结,主要是索引使用过程中的失效、优化等等条件及概念的整理。