MySQL 中的索引可以从多个维度进行系统分类。理解这些分类有助于在不同场景下选择正确的索引类型,优化查询性能。以下从数据结构、物理存储、逻辑约束、可见性四个主要维度,对 MySQL 索引进行全方位拆解。
🌳 一、按数据结构划分
索引的底层数据结构决定了查找、范围扫描等操作的效率特性。
| 索引类型 | 底层数据结构 | 支持引擎 | 特点 | 适用场景 |
|---|---|---|---|---|
| B+ 树索引 | B+ 树 | InnoDB (默认)、MyISAM、Memory (可选) | 等值查询 O(log N),范围查询极快(叶子链表),有序,通用 | 绝大多数查询:=、>、<、BETWEEN、ORDER BY、GROUP BY |
| 哈希索引 | 哈希表 | Memory (显式USING HASH)、InnoDB (自适应哈希索引 AHI,自动)、TempTable (内存临时表) | 等值查询 O(1) 极快,不支持范围查询,无序,易碰撞 | 临时缓存、等值查找为主的场景(如会话表) |
| 全文索引 | 倒排索引 | InnoDB (5.6+)、MyISAM、NDB | 专用于文本搜索,支持MATCH ... AGAINST,分词处理,支持相关性排序 | 文章内容搜索、模糊文本匹配(替代低效的LIKE '%...%') |
| 空间索引 | R 树 | InnoDB、MyISAM | 用于几何数据类型(POINT,LINESTRING,POLYGON),支持空间包含、距离查询 | GIS 应用、地图位置查询 |
| 倒排索引(全文) | 倒排列表 | InnoDB 内部 | 词 → 文档ID 的映射 | 全文检索 |
重点:InnoDB 的常规用户索引都是 B+ 树,AHI 是内存中的辅助加速结构。Memory 引擎允许在创建索引时显式指定USING HASH或USING BTREE,而 InnoDB 用户无法手动创建哈希索引。
💾 二、按物理存储(索引组织方式)划分
这是 InnoDB 最核心的分类,直接关系到数据如何存放和访问。
1. 聚簇索引 (Clustered Index)
- 本质:索引的