数据库索引核心分类(实操高频版)
✅ 一、按数据结构(最核心,面试 / 工作必用)
是数据库索引最根本的分类,决定索引性能、适用场景。
- B + 树索引 :MySQL/PostgreSQL 默认主流索引,平衡多路查找树 结构,叶子节点串联成链表,支持范围查询、排序、分页,适配 90% 业务场景(主键索引、普通索引均基于此)。
- 哈希索引 :基于哈希表实现,等值查询极快 (O (1)),但不支持范围查询、排序,仅适配精准匹配场景(如 Redis、MySQL 的 Memory 引擎)。
- 全文索引:专为文本内容检索设计,支持模糊匹配、关键词检索(如 MySQL 的 FULLTEXT,ES 核心索引),适用于文章、评论等大文本字段。
- R-Tree 索引 :空间索引,适配地理空间数据(如经纬度、区域范围),支持空间范围查询(如 MySQL 的 GIS 索引)。
✅ 二、按物理存储
区分索引与数据的存储关系,直接影响查询效率。
- 聚簇索引(聚集索引) :索引与数据行物理存储在一起 ,一张表仅能有 1 个 ,叶子节点就是实际数据行。MySQL 的主键索引就是聚簇索引,查询速度最快。
- 非聚簇索引(二级索引 / 辅助索引) :索引与数据行分开存储,一张表可创建多个,叶子节点存储聚簇索引的主键值,查询需回表(主键查询例外),如普通索引、联合索引。
✅ 三、按逻辑功能 / 业务用途(开发建索引直接参考)
从业务使用角度划分,是日常建索引最常用的分类方式。
- 主键索引 :主键字段创建的索引,唯一且非空,自动创建聚簇索引,保证数据唯一性,加速主键查询。
- 普通索引:最基础的索引,无唯一性约束,仅加速字段查询,可创建在任意非主键字段。
- 唯一索引 :字段值唯一(允许 NULL),保证数据唯一性的同时加速查询,如手机号、身份证号字段。
- 联合索引(复合索引) :基于多个字段 创建的索引,遵循最左前缀原则 ,适配多字段组合查询(如
where a=1 and b=2),比单字段索引更高效。 - 覆盖索引 :索引包含查询所需的全部字段,无需回表,直接从索引中获取数据,大幅提升查询性能(极致优化常用)。
✅ 四、其他高频特殊分类(拓展)
- 前缀索引 :对字段前 N 个字符创建索引,适配长字符串字段(如 varchar (255)),节省存储空间,降低索引维护成本。
- 反向索引 :对字段值反转后创建索引,适配按尾字符查询的场景(如手机号后 4 位、后缀匹配)。
- 位图索引 :按字段离散枚举值建立位图,适配低基数字段(如性别、状态),在 Oracle 中常用,MySQL 极少使用。
✔️ 核心速记(高频考点)
▷ 数据结构:B + 树(主力)、哈希(等值)、全文(文本) ▷ 物理存储:聚簇(1 个,主键)、非聚簇(多个,辅助) ▷ 业务常用:主键、唯一、普通、联合、覆盖