面试鸭返利网

mysql中普通索引、主索引、唯一索引有何区别

MySQL索引优化是数据库性能调优的关键,普通索引、主索引和唯一索引各有特点:普通索引适合加速查询但允许重复值,主索引强制唯一且非空(InnoDB的聚簇索引),唯一索引确保数据唯一性但允许NULL。面试常考索引选择策略,如模糊查询优化、自增主键优势等。实际开发中需根据业务场景选择,区分度低的字段不宜建索引。掌握这些索引特性,能有效提升SQL查询效率,避免常见性能陷阱。本文详细对比了三者差异,并给出技术选型建议,适合Java开发者面试准备和日常优化参考。

MySQL中普通索引、主索引、唯一索引有何区别

💡 2025年Java面试宝典抢先下载
🔵 链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g
提取码: 9b3g (建议保存备用)


🛠️ 一、普通索引(Normal Index)

普通索引是最基础的索引类型,纯粹为了加速查询而存在。它的特点很直白:

  1. 允许重复值:同一字段可以有多条相同记录
  2. 允许空值:字段内容可以为NULL
  3. 无约束:不强制数据唯一性
  4. 可多列:支持联合索引
-- 创建普通索引的典型语法
CREATE INDEX idx_name ON users(name);

面试常考点:当面试官问“如何优化模糊查询LIKE '%abc'”时,普通索引无法命中这种左模糊查询,这是高频考点❗

普通索引示意图


🔑 二、主索引(主键索引, Primary Key Index)

主索引是InnoDB存储引擎的物理存储依据,必须掌握三个核心特性:

  1. 唯一性:值绝对不允许重复
  2. 非空性NOT NULL是强制要求
  3. 聚簇索引:数据行直接存储在索引的叶子节点(划重点!)
-- 创建主键索引(建表时)
CREATE TABLE users (
    id INT PRIMARY KEY,  -- 主索引在此定义
    name VARCHAR(20)
);

⚠️ 高频面试题:为什么主键推荐用自增整型?
答:避免页分裂!B+树叶子节点按主键顺序存储,随机主键(如UUID)会导致频繁数据移动。


🚫 三、唯一索引(Unique Index)

唯一索引在普通索引基础上增加了数据唯一性约束

  1. 值必须唯一:重复值插入会触发错误
  2. 允许空值:但NULL也有特殊性(多个NULL不算重复)
  3. 约束优先:业务层面需要唯一性时使用
-- 创建唯一索引(确保邮箱不重复)
CREATE UNIQUE INDEX uni_email ON users(email);

📌 与主索引的关键区别

  • 一个表只能有一个主索引,但可创建多个唯一索引
  • 主索引必为聚簇索引(InnoDB),唯一索引是非聚簇索引

💎 三大索引对比速查表

| 特性 | 普通索引 | 主索引 | 唯一索引 | |--------------|----------------|------------------|----------------| | 唯一性 | ❌ 允许重复 | ✅ 绝对唯一 | ✅ 值必须唯一 | | 空值 | ✅ 允许NULL | ❌ 禁止NULL | ✅ 允许NULL | | 数量限制 | 无限制 | 每表仅一个 | 可建多个 | | 是否聚簇 | 非聚簇 | ✅ 聚簇索引 | 非聚簇 | | 创建方式 | CREATE INDEX | PRIMARY KEY | UNIQUE INDEX |


❓ 高频面试场景还原

面试官:”假设有用户表需要根据手机号快速查询,但手机号可能未录入,应该建什么索引?“

参考答案

“推荐使用普通索引。因为:

  1. 手机号需要快速查询 → 索引满足
  2. 允许未录入 → 字段可为NULL(唯一索引和主索引对空值有限制)
  3. 业务未要求绝对唯一 → 无需唯一约束的额外开销”

🎁 特别福利时间

准备面试需要好资料?这里有个小技巧:

通过 面试鸭返利网 购买面试鸭会员,找我返现 25元
已有300+程序员成功薅羊毛,点击直达👉 mianshiyafanli.com

面试鸭返利网优惠入口


💡 技术选型建议

  1. 主索引首选自增整型 → 减少页分裂
  2. 唯一索引用于业务唯一约束(如身份证号)
  3. 普通索引覆盖高频查询字段(注意避免过度索引)
  4. 更新频繁的字段慎用索引 → 维护成本高

索引不是银弹!曾见某电商给性别字段加索引,查询反而更慢 —— 区分度低的字段建索引等于浪费资源。

欢迎在评论区交流你的索引优化案例! 👇

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

立即加入面试鸭会员 →