MySQL索引专项复习

2023-11-03 09:30:39 浏览数 (1)

一、索引分类与数据结构

  • 数据结构分类:B 树,Hash索引,Full-text索引
  • 物理存储分类:聚集索引、非聚集索引
  • 字段特性分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)
  • 字段个数分类:单列索引、联合索引(也叫复合索引、组合索引)

如果一个表没有主键索引依旧会创建B 树 在InnoDB中,会为每一张表创建一个主键索引,如果没有明确的主键索引,会使用一个隐藏(ROW ID)的、自动生成的主键来创建索引。建议每个表都添加主键索引。

HASH索引 在InnoDB中不支持mysql,即使选择了hash索引,但是使用的依旧是B ,InnoDB只支持自适应的HASH索引,手动选择无效。

memory支持hash索引,存在hash冲突,使用链表解决

聚簇索引和非聚簇索引

聚集索引将索引和数据放在一起,非聚集索引分离开存储,所以需要二次查找。

在MySQL中二级索引使用非聚集索引 ,除了主键索引都是二级索引。二级索引叶子节点存储主键id,根据id再次通过主键索引查找,这叫回表

覆盖索引 查询的字段都在索引列中叫覆盖索引。

索引下推 二级索引中的优化手段,在范围查询中减少回表次数,没有索引下推的时候,一个范围查询使用二级索引,第一次查询了一个范围的主键,假设查询到10条数据,那么需要回表十次,如果使用索引下推,那么只需要回表一次,就可以拿到十条数据。

单列索引 索引只有一个字段,即使是中文,构成的B 树也是有序的

联合索引 构成索引的是多个字段。如何保证数据有序?

假设有三个字段 name、age、id 那就按照name、age、id的先后顺序排序,最后这些字段都在B 树的叶子节点上。

最左前缀原则 当我创建n个字段的联合索引时,若想使用索引查询,查询条件必须使用第一个字段,因为联合索引是按照字段顺序排序的,没有第一个字段就是乱序。 创建A B C的联合索引,AB、AC、ABC都是可以走联合索引的,但是BC不可以

切记合理使用单列索引和联合索引,不可盲目添加索引

索引优缺点 优点:提高检索效率;减低排序成本,默认asc。

缺点:创建和维护索引需要时间;占用物理空间;降低表的增删改效率。

二、MySQL优化

Explain可以模拟优化器执行查询语句,帮助我们理解sql是如何运行的。

Explain字段含义

列名

含义

tyep

查询所用的访问类型

possible_kes

可能用到的索引

key

实际用到的索引

ref

使用索引时,与索引等值匹配的列或者常量

0 人点赞