MySQL索引类型

MySQL 中常见的索引类型可以从多个角度划分,面试和实战中常考的是 按数据结构分类 和 按功能/逻辑分类。下面给你一个清晰、系统的整理。

一、按数据结构分类(最核心)

索引类型 说明 适用场景

B+Tree 索引 MySQL 默认索引结构,InnoDB 主要使用 等值查询、范围查询、排序、分组

Hash 索引 基于哈希表,等值查询极快 Memory 引擎常用,不支持范围查询

R-Tree 索引 空间索引,用于地理数据 GIS 地理位置

Full-text 索引 全文索引 文本内容搜索

✅ InnoDB 默认使用 B+Tree

二、按逻辑/功能分类(最常被问)

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.0

CREATE INDEX idx_time ON log(create_time DESC);

五、索引类型对比总结

类型 是否默认 是否唯一 是否聚簇

PRIMARY KEY ✅ ✅ ✅

UNIQUE ❌ ✅ ❌

INDEX ❌ ❌ ❌

FULLTEXT ❌ ❌ ❌

六、面试高频一句话总结 ✅

MySQL 默认使用 B+Tree 索引,InnoDB 中主键是聚簇索引,普通索引是非聚簇索引;常见类型包括普通索引、唯一索引、主键索引、组合索引和全文索引。

相关推荐
SelectDB23 分钟前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_30 分钟前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能
KaMeidebaby1 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
卓怡学长1 小时前
w269基于spring boot + vue 候鸟监测数据管理系统
java·数据库·spring boot·spring·intellij-idea
ClouGence2 小时前
MySQL 到 StarRocks 数据迁移同步:同步方案与实践指南
数据库·mysql
行业研究员2 小时前
当数据生产者变成 Agent,数据库底座如何重构?
大数据·数据库·重构
人工智能培训2 小时前
破解数据发展瓶颈 激活数字经济新动能
大数据·数据库·人工智能·深度学习·神经网络·机器学习·生成对抗网络
1234567890@world2 小时前
知识管理 | 数字化 | APQC
大数据·数据库·人工智能
倒流时光三十年3 小时前
PostgreSQL JSONB 操作符详解
大数据·数据库·postgresql
田超凡3 小时前
深入理解MySQL_10 Explain的用法
mysql·java-ee