1.索引概述

使用索引优劣:

image.png

2.索引结构

image.png
image.png

3.索引分类

image.png
image.png
聚集索引选取规则:

  1. 如果存在主键,主键索引就是聚集索引。
  2. 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
  3. 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索 引。

image.png
image.png

InnoDB主键索引的B+tree高度为多高呢?
image.png

4.索引语法

image.png

5.SQL性能分析

5.1.SQL执行频率

image.png

5.2.慢查询日志

image.png

5.3.profiles

image.png

5.4.explain

image.png
image.png

6.索引使用

6.1.最左前缀法则

image.png
image.png

6.2.索引失效情况

6.2.1.范围查询

image.png

6.2.2. 索引列运算

不要在索引列上进行运算操作, 索引将失效
image.png

6.2.3.字符串不加引号

字符串类型字段使用时,不加引号,索引将失效。
image.png

6.2.4. 模糊查询

如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。
image.png

6.2.5. or连接条件

用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
image.png

6.2.6.数据分布影响

如果MySQL评估使用索引比全表更慢,则不使用索引。
image.png

6.3.SQL提示

image.png

6.4.覆盖索引

覆盖索引是指 查询使用了索引,并 且需要返回的列,在该索引中已经全部能够找到
尽量使用覆盖索引,减少select *
image.png

image.png

6.5.前缀索引

当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让 索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。此时可以只将字符串的一部分前缀,建 立索引,这样可以大大节约索引空间,从而提高索引效率。
image.png

6.6.单列索引/联合索引

image.png

7.索引设计原则

image.png