在关系型数据库中,**主键(Primary Key)和索引(Index)**经常被一起提到,但它们的作用和本质并不相同。下面从多个角度对比说明。
主键会自动创建索引,但索引不一定是主键
| 对比项 | 主键 | 索引 |
|---|---|---|
| 是否唯一 | 必须唯一 | 可唯一也可非唯一 |
| 是否允许 NULL | 不允许 | 允许 |
| 数量限制 | 一个表只能一个 | 一个表可多个 |
| 主要作用 | 标识记录、保证数据完整性 | 加快查询速度 |
| 是否自动创建 | 定义即存在 | 需手动或随主键自动创建 |
-- 主键(会自动生成索引)
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- 普通索引(仅加速查询)
CREATE INDEX idx_name ON user(name);
id 是主键,保证每条记录唯一name 上的索引,只是为了让 WHERE name = 'xxx' 更快❌ 误区 1:主键就是索引
✅ 正确:主键是一种约束,数据库用索引来实现它
❌ 误区 2:有索引就快
✅ 正确:索引设计不合理反而会降低写入性能
主键保证“你是谁”,索引解决“怎么更快找到你”。
如果你愿意,我也可以结合 InnoDB 聚集索引、联合索引 或 实际性能问题 再深入讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。