在面试或项目优化中,“数据库索引” 是必考、必问、也最容易踩坑的知识点。
很多人只知道“建索引能让查询更快”,但不知道有哪些索引、各自有什么区别、该怎么设计。
这篇文章就是你的 MySQL 索引速查指南,看完就能快速上手 + 面试不慌。
一、什么是索引?
索引(Index)就像书本的目录,用来加快数据的查找速度。
当表中有大量数据时,数据库通过索引可以更快定位到目标行,而不需要全表扫描。
通俗理解:
没有索引 = 一页一页地翻书;
有了索引 = 直接查目录,瞬间跳转。
底层原理上,MySQL 的大多数索引基于 B+Tree 实现,也就是说它是一种有序结构,便于范围查询和快速定位。
二、索引的主要类型
在 MySQL 中,索引常见的分类有:
1. 主键索引(PRIMARY KEY)
主键索引是表中最重要的索引,一个表只能有一个主键。
特点:
主键字段的值必须唯一,且不能为空;
MySQL 会自动为主键创建索引;
用于唯一标识每一条记录。
示例:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
这里的 id 字段自动建立了主键索引。
2. 唯一索引(UNIQUE)
唯一索引保证字段的值不重复,但允许为空(NULL)。
与主键索引的区别是:唯一索引可以有多个字段建立。
示例:
CREATE UNIQUE INDEX idx_email ON users(email);
这意味着 email 字段的值不能重复,否则插入时会报错。
应用场景:
用户邮箱、身份证号、手机号等具备唯一性的数据。
3. 普通索引(INDEX)
普通索引是最基础的索引类型,用来加快查询速度,但不限制数据唯一性。
示例:
CREATE INDEX idx_name ON users(name);
它只是单纯地加快按 name 查询的效率,不做唯一约束。
应用场景:
高频搜索字段;
但不需要保证唯一性的列。
4. 联合索引(Composite Index)
联合索引是指对多个字段同时建立索引。
例如:
CREATE INDEX idx_name_email ON users(name, email);
查询时,如果 WHERE 条件中使用了索引的前缀部分(如 name 或 name + email),索引就能生效。
这就引出了著名的:
最左前缀原则(Leftmost Prefix Rule)
简单说:
如果你创建了 (name, email) 联合索引,以下查询能用到索引:
WHERE name = 'Tom';
WHERE name = 'Tom' AND email = 'tom@test.com';
但这句不行:
WHERE email = 'tom@test.com';
因为它跳过了联合索引的“最左列”。
三、索引的命名建议
实际开发中,为了方便维护,建议:
索引命名统一使用前缀:idx_;
命名格式示例:
单列索引:idx_username
联合索引:idx_name_email
唯一索引:uniq_email
这样在团队项目中一眼就能区分类型和作用。
四、索引的优点与缺点
优点:
大幅提升数据查询速度;
减少数据库 I/O 操作;
加速分组(GROUP BY)与排序(ORDER BY)。
缺点:
占用额外存储空间;
插入、删除、更新操作会变慢(因为索引也要同步更新);
建错索引反而会降低性能。
✅ 记住一句话:
“索引不是越多越好,而是恰到好处最好。”
五、索引使用的最佳实践
为查询频繁的字段建索引(如用户名、邮箱等)。
避免为低选择性字段建索引(如性别、是否删除标记)。
合理使用联合索引,遵守最左前缀法则。
尽量使用覆盖索引,减少回表查询。
定期通过 EXPLAIN 分析查询执行计划,确认索引是否生效。
六、速查口诀(记忆版)
主键唯一各一位,普通查询配字段。
联合索引看顺序,最左前缀莫忘记。
索引虽好别乱建,更新频繁需谨慎。
七、总结
本文帮你快速掌握了 MySQL 中最常用的 4 种索引类型:
主键索引:唯一标识一行数据
唯一索引:保证字段唯一
普通索引:加速查询
联合索引:多字段优化查询
学会这些,你就能在实际开发中写出更高效的 SQL,也能在面试中自信解释“索引底层逻辑与设计思路”。
💬 最后一句话:
索引是数据库优化的灵魂,
会建索引的人,SQL 性能至少提升十倍!
1万+

被折叠的 条评论
为什么被折叠?



