[MySQL面试题]-索引 1-3 MySQL 索引机制解析

91 阅读1分钟

image.png

1. MySQL 索引机制解析

  • 索引类型

    1. B+ Tree 索引(最常见)

      所有数据都存在🍃叶子节点,非叶子节点只存储键,用于加快搜索速度。

    2. Hash 索引

      仅用于Memory存储引擎,通过哈希函数将键映射到对应位置,适用于等值查询,但不支持范围查询。

    3. Ful-text 索引

      用于全文搜索(文章、描述字段),适用于文本内容中查找关键词。

  • 索引结构(InnoDB)

    1. 聚簇索引(Clustered index)

      InnoDB的主键索引就是聚簇索引,数据行和索引存储在同一颗 B+Tree中,每个表只能有一个聚簇索引。

2. InnoDB与MyISAM索引实现的区别

  • InnoDB 主键查找过程

    查主键 = 直接查聚簇索引 → 得到数据(无需回表)

    查二级索引 = 先查索引 → 得主键 → 回主键树查数据

  • MyISAM 主键查找过程

    主键索引存的是数据地址(偏移),查一次就可直接定位数据(不需要“回表”)

image.png

3. 没有索引时是否会创建 B+ 树

InnoDB

  • 如果定义了主键 primary key 聚簇索引基于主键建立。
  • 如果没有主键,但定义了唯一非空索引,使用该唯一索引作为聚簇索引。
  • 如果都没有 InnoDB 自动创建一个 6 字节的隐藏row_id列,并基于它建立聚簇索引。
-- 使用 ROW_NUMBER() 作为行标识符 
SELECT ROW_NUMBER() OVER() AS row_id, name FROM test_no_pk;

row_id

  • 全局自增(所有无主键的表共享同一个计数器)
  • 最大值是 2^48-1 (超过会会循环复用,可能引发主键冲突)