MySQL索引分类 一、按存储结构InnoDB 核心区分1. 聚簇索引主键索引每张表只能有 1 个以主键作为 B 树排序键B 树叶子节点直接存储完整一行数据无主键时InnoDB 自动生成隐藏row_id作为聚簇索引。2. 二级索引辅助索引普通索引、唯一索引、联合索引都属于二级索引 叶子节点只存主键值查询到数据后需要回表走聚簇索引拿完整行。MyISAM 没有聚簇索引所有索引都是二级索引索引和数据文件分离。二、按索引字段数量单列索引只给单个字段建立索引联合索引复合索引多个字段组合索引遵循最左前缀匹配原则三、按字段唯一性约束普通索引 INDEX允许重复值、允许 NULL仅提升查询速度。唯一索引 UNIQUE字段值不能重复允许一个 NULL。主键索引 PRIMARY特殊唯一索引不允许 NULL、不可重复一张表仅一个本质是聚簇索引。四、特殊功能索引前缀索引针对字符串类型只截取字段前 N 个字符建立索引节省索引空间 缺点无法使用排序、无法作为覆盖索引。全文索引 FULLTEXT用于长文本关键词检索替代低效like %关键词% 支持中文需配合分词插件。空间索引 SPATIAL基于 R 树存储坐标、几何图形用于地理位置范围查询。函数索引表达式索引 MySQL 5.7/8.0对YEAR(create_time)、UPPER(name)等函数结果建索引 避免where year(time) 2026导致索引失效。覆盖索引不是独立索引类型是使用场景查询需要的所有字段都在索引中无需回表。自适应哈希索引 AHIInnoDB 内部自动维护缓存热点 B 树页加速等值查询人工不可创建。五、按底层数据结构B 树索引InnoDB、MyISAM 默认 支持等值、范围、排序、分组业务最常用。Hash 索引仅 Memory 引擎原生支持等值查询极快不支持范围、排序、模糊匹配。六、其他衍生分类分区索引分区表下每个分区独立维护索引不可见索引 INVISIBLEMySQL 8.0创建后优化器不使用用于灰度验证索引是否可删除降序索引 DESC联合索引内指定字段排序方向优化 order by。极简总结记忆存储聚簇索引、二级索引字段数单列、联合唯一性普通、唯一、主键特殊前缀、全文、空间、函数、覆盖、不可见底层结构B 树、Hash