1. MySQL 索引机制解析
-
索引类型
-
B+ Tree 索引(最常见)
所有数据都存在🍃叶子节点,非叶子节点只存储键,用于加快搜索速度。
-
Hash 索引
仅用于Memory存储引擎,通过哈希函数将键映射到对应位置,适用于等值查询,但不支持范围查询。
-
Ful-text 索引
用于全文搜索(文章、描述字段),适用于文本内容中查找关键词。
-
-
索引结构(InnoDB)
-
聚簇索引(Clustered index)
InnoDB的主键索引就是聚簇索引,数据行和索引存储在同一颗 B+Tree中,每个表只能有一个聚簇索引。
-
2. InnoDB与MyISAM索引实现的区别
-
InnoDB 主键查找过程
查主键 = 直接查聚簇索引 → 得到数据(无需回表)
查二级索引 = 先查索引 → 得主键 → 回主键树查数据
-
MyISAM 主键查找过程
主键索引存的是数据地址(偏移),查一次就可直接定位数据(不需要“回表”)
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 (超过会会循环复用,可能引发主键冲突)