数据库索引速查大全:一文搞懂主键、唯一、普通、联合索引

在面试或项目优化中,“数据库索引” 是必考、必问、也最容易踩坑的知识点。

很多人只知道“建索引能让查询更快”,但不知道有哪些索引、各自有什么区别、该怎么设计。

这篇文章就是你的 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 性能至少提升十倍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值