MySQL 中常见的索引类型可以从多个角度划分面试和实战中常考的是 按数据结构分类 和 按功能/逻辑分类。下面给你一个清晰、系统的整理。一、按数据结构分类最核心索引类型 说明 适用场景BTree 索引 MySQL 默认索引结构InnoDB 主要使用 等值查询、范围查询、排序、分组Hash 索引 基于哈希表等值查询极快 Memory 引擎常用不支持范围查询R-Tree 索引 空间索引用于地理数据 GIS 地理位置Full-text 索引 全文索引 文本内容搜索✅ InnoDB 默认使用 BTree二、按逻辑/功能分类最常被问1️⃣ 普通索引INDEX• 最基本的索引• 无唯一性限制CREATE INDEX idx_name ON user(name);2️⃣ 唯一索引UNIQUE INDEX• 索引列值必须唯一• 允许 NULL多个 NULL 不算重复CREATE UNIQUE INDEX uk_email ON user(email);✅ 常用于邮箱、手机号、业务唯一键3️⃣ 主键索引PRIMARY KEY• 特殊的唯一索引• 不允许 NULL• 一张表只能有一个主键PRIMARY KEY (id)✅ InnoDB 中主键即聚簇索引4️⃣ 组合索引复合索引 / 联合索引• 多个列组成的索引• 遵循 最左前缀原则CREATE INDEX idx_a_b ON t(a, b);✅ 适合多条件查询❌ (b) 单独查询无法使用该索引5️⃣ 前缀索引• 对字段前 N 个字符建索引• 节省空间CREATE INDEX idx_title ON article(title(20));✅ 常用于 TEXT / VARCHAR❌ 不能用前缀索引做覆盖索引6️⃣ 全文索引FULLTEXT• 用于关键词搜索• 替代 LIKE ‘%xxx%’CREATE FULLTEXT INDEX ft_content ON article(content);✅ 支持自然语言 / 布尔搜索三、按存储方式分类InnoDB 特有1️⃣ 聚簇索引Clustered Index• InnoDB 主键索引• 数据行存储在叶子节点• 一张表只有一个✅ 主键查询最快❌ 主键应尽量短、自增2️⃣ 非聚簇索引Secondary Index• 普通索引、唯一索引、组合索引• 叶子节点存 主键值✅ 需要回表查询完整数据四、特殊索引类型类型 说明覆盖索引 索引包含查询所需全部字段无需回表函数索引 MySQL 8.0 支持对表达式建索引降序索引 MySQL 8.0 支持 DESC– MySQL 8.0CREATE INDEX idx_time ON log(create_time DESC);五、索引类型对比总结类型 是否默认 是否唯一 是否聚簇PRIMARY KEY ✅ ✅ ✅UNIQUE ❌ ✅ ❌INDEX ❌ ❌ ❌FULLTEXT ❌ ❌ ❌六、面试高频一句话总结 ✅MySQL 默认使用 BTree 索引InnoDB 中主键是聚簇索引普通索引是非聚簇索引常见类型包括普通索引、唯一索引、主键索引、组合索引和全文索引。